{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "04.first-neural-network.ipynb",
      "provenance": [],
      "collapsed_sections": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Fz7Xygqo3s3b",
        "colab_type": "text"
      },
      "source": [
        "# Build Your First Neural Network with PyTorch\n",
        "\n",
        "In this tutorial, you'll build your first Neural Network using PyTorch. You'll use it to predict whether or not is going to rain tomorrow using real weather information.\n",
        "\n",
        "- [Run the complete notebook in your browser (Google Colab)](https://colab.research.google.com/drive/1lDXVkdt7GC8jK_nGmOMKeDywXse-DY-u)\n",
        "- [Read the Getting Things Done with Pytorch book](https://github.com/curiousily/Getting-Things-Done-with-Pytorch)\n",
        "\n",
        "You'll learn how to:\n",
        "\n",
        "- Preprocess CSV files and convert the data to Tensors\n",
        "- Build your own Neural Network model with PyTorch\n",
        "- Use a loss function and an optimizer to train your model\n",
        "- Evaluate your model and learn about the perils of imbalanced classification"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "izq6eneDG4LP",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "!pip install -q -U watermark"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "pDQQni6tG5G3",
        "colab_type": "code",
        "outputId": "00b6611b-476e-475c-c7a4-d2b38b5ee44c",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 119
        }
      },
      "source": [
        "%reload_ext watermark\n",
        "%watermark -v -p numpy,pandas,torch"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "CPython 3.6.9\n",
            "IPython 5.5.0\n",
            "\n",
            "numpy 1.17.5\n",
            "pandas 0.25.3\n",
            "torch 1.4.0\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "AePREfpPkH2b",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Heavily based on https://github.com/Prodicode/ann-visualizer\n",
        "\n",
        "def ann_viz(model, view=True, filename=\"network.gv\"):\n",
        "    \"\"\"Vizualizez a Sequential model.\n",
        "\n",
        "    # Arguments\n",
        "        model: A Keras model instance.\n",
        "\n",
        "        view: whether to display the model after generation.\n",
        "\n",
        "        filename: where to save the vizualization. (a .gv file)\n",
        "\n",
        "        title: A title for the graph\n",
        "    \"\"\"\n",
        "    from graphviz import Digraph\n",
        "\n",
        "    input_layer = 0\n",
        "    hidden_layers_nr = 0\n",
        "    layer_types = []\n",
        "    hidden_layers = []\n",
        "    output_layer = 0\n",
        "    layers = [layer for layer in model.modules() if type(layer) == torch.nn.Linear]\n",
        "\n",
        "    for layer in layers:\n",
        "        if layer == layers[0]:\n",
        "            input_layer = layer.in_features\n",
        "            hidden_layers_nr += 1\n",
        "            if type(layer) == torch.nn.Linear:                \n",
        "                hidden_layers.append(layer.out_features)\n",
        "                layer_types.append(\"Dense\")\n",
        "            else:\n",
        "                raise Exception(\"Input error\")\n",
        "\n",
        "        else:\n",
        "            if layer == layers[-1]:\n",
        "                output_layer = layer.out_features\n",
        "            else:\n",
        "                hidden_layers_nr += 1\n",
        "                if type(layer) == torch.nn.Linear:\n",
        "\n",
        "                    hidden_layers.append(layer.out_features)\n",
        "                    layer_types.append(\"Dense\")\n",
        "                else:\n",
        "                    raise Exception(\"Hidden error\")\n",
        "        last_layer_nodes = input_layer\n",
        "        nodes_up = input_layer\n",
        "\n",
        "    g = Digraph(\"g\", filename=filename)\n",
        "    n = 0\n",
        "    g.graph_attr.update(splines=\"false\", nodesep=\"0.5\", ranksep=\"0\", rankdir='LR')\n",
        "    # Input Layer\n",
        "    with g.subgraph(name=\"cluster_input\") as c:\n",
        "        if type(layers[0]) == torch.nn.Linear:\n",
        "            the_label = \"Input Layer\"\n",
        "            if layers[0].in_features > 10:\n",
        "                the_label += \" (+\" + str(layers[0].in_features - 10) + \")\"\n",
        "                input_layer = 10\n",
        "            c.attr(color=\"white\")\n",
        "            for i in range(0, input_layer):\n",
        "                n += 1\n",
        "                c.node(str(n))\n",
        "                c.attr(labeljust=\"1\")\n",
        "                c.attr(label=the_label, labelloc=\"bottom\")\n",
        "                c.attr(rank=\"same\")                \n",
        "                c.node_attr.update(\n",
        "                    width=\"0.65\",\n",
        "                    style=\"filled\",                    \n",
        "                    shape=\"circle\",\n",
        "                    color=HAPPY_COLORS_PALETTE[3],\n",
        "                    fontcolor=HAPPY_COLORS_PALETTE[3],\n",
        "                )\n",
        "    for i in range(0, hidden_layers_nr):\n",
        "        with g.subgraph(name=\"cluster_\" + str(i + 1)) as c:\n",
        "            if layer_types[i] == \"Dense\":\n",
        "                c.attr(color=\"white\")\n",
        "                c.attr(rank=\"same\")\n",
        "                the_label = f'Hidden Layer {i + 1}'\n",
        "                if layers[i].out_features > 10:\n",
        "                    the_label += \" (+\" + str(layers[i].out_features - 10) + \")\"\n",
        "                    hidden_layers[i] = 10\n",
        "                c.attr(labeljust=\"right\", labelloc=\"b\", label=the_label)\n",
        "                for j in range(0, hidden_layers[i]):\n",
        "                    n += 1\n",
        "                    c.node(\n",
        "                        str(n),\n",
        "                        width=\"0.65\",\n",
        "                        shape=\"circle\",\n",
        "                        style=\"filled\",\n",
        "                        color=HAPPY_COLORS_PALETTE[0],\n",
        "                        fontcolor=HAPPY_COLORS_PALETTE[0],\n",
        "                    )\n",
        "                    for h in range(nodes_up - last_layer_nodes + 1, nodes_up + 1):\n",
        "                        g.edge(str(h), str(n))\n",
        "                last_layer_nodes = hidden_layers[i]\n",
        "                nodes_up += hidden_layers[i]\n",
        "            else:\n",
        "                raise Exception(\"Hidden layer type not supported\")\n",
        "\n",
        "    with g.subgraph(name=\"cluster_output\") as c:\n",
        "        if type(layers[-1]) == torch.nn.Linear:\n",
        "            c.attr(color=\"white\")\n",
        "            c.attr(rank=\"same\")\n",
        "            c.attr(labeljust=\"1\")\n",
        "            for i in range(1, output_layer + 1):\n",
        "                n += 1\n",
        "                c.node(\n",
        "                    str(n),\n",
        "                    width=\"0.65\",\n",
        "                    shape=\"circle\",\n",
        "                    style=\"filled\",\n",
        "                    color=HAPPY_COLORS_PALETTE[4],\n",
        "                    fontcolor=HAPPY_COLORS_PALETTE[4],\n",
        "                    \n",
        "                )\n",
        "                for h in range(nodes_up - last_layer_nodes + 1, nodes_up + 1):\n",
        "                    g.edge(str(h), str(n))\n",
        "            c.attr(label=\"Output Layer\", labelloc=\"bottom\")\n",
        "            c.node_attr.update(\n",
        "                color=\"#2ecc71\", style=\"filled\", fontcolor=\"#2ecc71\", shape=\"circle\"\n",
        "            )\n",
        "\n",
        "    g.attr(arrowShape=\"none\")\n",
        "    g.edge_attr.update(arrowhead=\"none\", color=\"#707070\", penwidth=\"2\")\n",
        "    if view is True:\n",
        "        g.view()\n",
        "\n",
        "    return g\n"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "tLB23K0eGrIm",
        "colab_type": "code",
        "outputId": "8e68bc2d-c917-47b2-fb2a-cc5fb82ecf3e",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "import torch\n",
        "\n",
        "import os\n",
        "import numpy as np\n",
        "import pandas as pd\n",
        "from tqdm import tqdm\n",
        "import seaborn as sns\n",
        "from pylab import rcParams\n",
        "import matplotlib.pyplot as plt\n",
        "from matplotlib import rc\n",
        "from sklearn.model_selection import train_test_split\n",
        "from sklearn.metrics import confusion_matrix, classification_report\n",
        "\n",
        "from torch import nn, optim\n",
        "\n",
        "import torch.nn.functional as F\n",
        "\n",
        "%matplotlib inline\n",
        "%config InlineBackend.figure_format='retina'\n",
        "\n",
        "sns.set(style='whitegrid', palette='muted', font_scale=1.2)\n",
        "\n",
        "HAPPY_COLORS_PALETTE = [\"#01BEFE\", \"#FFDD00\", \"#FF7D00\", \"#FF006D\", \"#93D30C\", \"#8F00FF\"]\n",
        "\n",
        "sns.set_palette(sns.color_palette(HAPPY_COLORS_PALETTE))\n",
        "\n",
        "rcParams['figure.figsize'] = 12, 8\n",
        "\n",
        "RANDOM_SEED = 42\n",
        "np.random.seed(RANDOM_SEED)\n",
        "torch.manual_seed(RANDOM_SEED)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<torch._C.Generator at 0x7f33b7e8ddf0>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 4
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "I67ain8jB3bP",
        "colab_type": "text"
      },
      "source": [
        "## Data\n",
        "\n",
        "Our dataset contains daily weather information from multiple Australian weather stations. We're about to answer a simple question. *Will it rain tomorrow?*\n",
        "\n",
        "The data is hosted on [Kaggle](https://www.kaggle.com/jsphyg/weather-dataset-rattle-package) and created by [Joe Young](https://www.kaggle.com/jsphyg). I've uploaded the dataset to Google Drive. Let's get it:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wMB_XqAqG05R",
        "colab_type": "code",
        "outputId": "8f5953e1-d9ce-443f-8a1d-da8e5f62916f",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 85
        }
      },
      "source": [
        "!gdown --id 1Q1wUptbNDYdfizk5abhmoFxIQiX19Tn7"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Downloading...\n",
            "From: https://drive.google.com/uc?id=1Q1wUptbNDYdfizk5abhmoFxIQiX19Tn7\n",
            "To: /content/weatherAUS.csv\n",
            "14.2MB [00:00, 38.9MB/s]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "6GxdXyHRGlp2",
        "colab_type": "text"
      },
      "source": [
        "And load it into a data frame:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "pb7qBnsKIb_4",
        "colab_type": "code",
        "outputId": "27869fa4-59ef-41e9-87ee-1311a2f62a53",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 309
        }
      },
      "source": [
        "df = pd.read_csv('weatherAUS.csv')\n",
        "df.head()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Date</th>\n",
              "      <th>Location</th>\n",
              "      <th>MinTemp</th>\n",
              "      <th>MaxTemp</th>\n",
              "      <th>Rainfall</th>\n",
              "      <th>Evaporation</th>\n",
              "      <th>Sunshine</th>\n",
              "      <th>WindGustDir</th>\n",
              "      <th>WindGustSpeed</th>\n",
              "      <th>WindDir9am</th>\n",
              "      <th>WindDir3pm</th>\n",
              "      <th>WindSpeed9am</th>\n",
              "      <th>WindSpeed3pm</th>\n",
              "      <th>Humidity9am</th>\n",
              "      <th>Humidity3pm</th>\n",
              "      <th>Pressure9am</th>\n",
              "      <th>Pressure3pm</th>\n",
              "      <th>Cloud9am</th>\n",
              "      <th>Cloud3pm</th>\n",
              "      <th>Temp9am</th>\n",
              "      <th>Temp3pm</th>\n",
              "      <th>RainToday</th>\n",
              "      <th>RISK_MM</th>\n",
              "      <th>RainTomorrow</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>2008-12-01</td>\n",
              "      <td>Albury</td>\n",
              "      <td>13.4</td>\n",
              "      <td>22.9</td>\n",
              "      <td>0.6</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>W</td>\n",
              "      <td>44.0</td>\n",
              "      <td>W</td>\n",
              "      <td>WNW</td>\n",
              "      <td>20.0</td>\n",
              "      <td>24.0</td>\n",
              "      <td>71.0</td>\n",
              "      <td>22.0</td>\n",
              "      <td>1007.7</td>\n",
              "      <td>1007.1</td>\n",
              "      <td>8.0</td>\n",
              "      <td>NaN</td>\n",
              "      <td>16.9</td>\n",
              "      <td>21.8</td>\n",
              "      <td>No</td>\n",
              "      <td>0.0</td>\n",
              "      <td>No</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>2008-12-02</td>\n",
              "      <td>Albury</td>\n",
              "      <td>7.4</td>\n",
              "      <td>25.1</td>\n",
              "      <td>0.0</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>WNW</td>\n",
              "      <td>44.0</td>\n",
              "      <td>NNW</td>\n",
              "      <td>WSW</td>\n",
              "      <td>4.0</td>\n",
              "      <td>22.0</td>\n",
              "      <td>44.0</td>\n",
              "      <td>25.0</td>\n",
              "      <td>1010.6</td>\n",
              "      <td>1007.8</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>17.2</td>\n",
              "      <td>24.3</td>\n",
              "      <td>No</td>\n",
              "      <td>0.0</td>\n",
              "      <td>No</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>2008-12-03</td>\n",
              "      <td>Albury</td>\n",
              "      <td>12.9</td>\n",
              "      <td>25.7</td>\n",
              "      <td>0.0</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>WSW</td>\n",
              "      <td>46.0</td>\n",
              "      <td>W</td>\n",
              "      <td>WSW</td>\n",
              "      <td>19.0</td>\n",
              "      <td>26.0</td>\n",
              "      <td>38.0</td>\n",
              "      <td>30.0</td>\n",
              "      <td>1007.6</td>\n",
              "      <td>1008.7</td>\n",
              "      <td>NaN</td>\n",
              "      <td>2.0</td>\n",
              "      <td>21.0</td>\n",
              "      <td>23.2</td>\n",
              "      <td>No</td>\n",
              "      <td>0.0</td>\n",
              "      <td>No</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>2008-12-04</td>\n",
              "      <td>Albury</td>\n",
              "      <td>9.2</td>\n",
              "      <td>28.0</td>\n",
              "      <td>0.0</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NE</td>\n",
              "      <td>24.0</td>\n",
              "      <td>SE</td>\n",
              "      <td>E</td>\n",
              "      <td>11.0</td>\n",
              "      <td>9.0</td>\n",
              "      <td>45.0</td>\n",
              "      <td>16.0</td>\n",
              "      <td>1017.6</td>\n",
              "      <td>1012.8</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>18.1</td>\n",
              "      <td>26.5</td>\n",
              "      <td>No</td>\n",
              "      <td>1.0</td>\n",
              "      <td>No</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>2008-12-05</td>\n",
              "      <td>Albury</td>\n",
              "      <td>17.5</td>\n",
              "      <td>32.3</td>\n",
              "      <td>1.0</td>\n",
              "      <td>NaN</td>\n",
              "      <td>NaN</td>\n",
              "      <td>W</td>\n",
              "      <td>41.0</td>\n",
              "      <td>ENE</td>\n",
              "      <td>NW</td>\n",
              "      <td>7.0</td>\n",
              "      <td>20.0</td>\n",
              "      <td>82.0</td>\n",
              "      <td>33.0</td>\n",
              "      <td>1010.8</td>\n",
              "      <td>1006.0</td>\n",
              "      <td>7.0</td>\n",
              "      <td>8.0</td>\n",
              "      <td>17.8</td>\n",
              "      <td>29.7</td>\n",
              "      <td>No</td>\n",
              "      <td>0.2</td>\n",
              "      <td>No</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "         Date Location  MinTemp  ...  RainToday  RISK_MM  RainTomorrow\n",
              "0  2008-12-01   Albury     13.4  ...         No      0.0            No\n",
              "1  2008-12-02   Albury      7.4  ...         No      0.0            No\n",
              "2  2008-12-03   Albury     12.9  ...         No      0.0            No\n",
              "3  2008-12-04   Albury      9.2  ...         No      1.0            No\n",
              "4  2008-12-05   Albury     17.5  ...         No      0.2            No\n",
              "\n",
              "[5 rows x 24 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 6
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "OW1qUXeYH2ME",
        "colab_type": "text"
      },
      "source": [
        "We have a large set of features/columns here. You might also notice some *NaN*s. Let's have a look at the overall dataset size:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "VYs-oeNAH23q",
        "colab_type": "code",
        "outputId": "b44a8c0b-81fc-4ebf-f0d9-a9a5db6f2901",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "df.shape"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(142193, 24)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 7
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "CgZZj38qJSSs",
        "colab_type": "text"
      },
      "source": [
        "Looks like we have plenty of data. But we got to do something about those missing values."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3x-gF4Y83Ycm",
        "colab_type": "text"
      },
      "source": [
        "## Data Preprocessing\n",
        "\n",
        "We'll start by simplifying the problem by removing most of the data. We'll use only 4 columns for predicting whether or not is going to rain tomorrow:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "TMozkylDI1uY",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "cols = ['Rainfall', 'Humidity3pm', 'Pressure9am', 'RainToday', 'RainTomorrow']\n",
        "\n",
        "df = df[cols]"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "EKO3kWwDNUoy",
        "colab_type": "text"
      },
      "source": [
        "Neural Networks don't work with much else than numbers. We'll convert *yes* and *no* to 1 and 0, respectively:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "BZxTNJu2J5C5",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "df['RainToday'].replace({'No': 0, 'Yes': 1}, inplace = True)\n",
        "df['RainTomorrow'].replace({'No': 0, 'Yes': 1}, inplace = True)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "58hXrACBNfw9",
        "colab_type": "text"
      },
      "source": [
        "Let's drop the rows with missing values. There are better ways to do this, but we'll keep it simple:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "sd4eBNn4NTUD",
        "colab_type": "code",
        "outputId": "81da2d18-0021-4e3b-9e13-ddd047114605",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 204
        }
      },
      "source": [
        "df = df.dropna(how='any')\n",
        "df.head()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Rainfall</th>\n",
              "      <th>Humidity3pm</th>\n",
              "      <th>Pressure9am</th>\n",
              "      <th>RainToday</th>\n",
              "      <th>RainTomorrow</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>0.6</td>\n",
              "      <td>22.0</td>\n",
              "      <td>1007.7</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>0.0</td>\n",
              "      <td>25.0</td>\n",
              "      <td>1010.6</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>0.0</td>\n",
              "      <td>30.0</td>\n",
              "      <td>1007.6</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>0.0</td>\n",
              "      <td>16.0</td>\n",
              "      <td>1017.6</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>1.0</td>\n",
              "      <td>33.0</td>\n",
              "      <td>1010.8</td>\n",
              "      <td>0.0</td>\n",
              "      <td>0</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   Rainfall  Humidity3pm  Pressure9am  RainToday  RainTomorrow\n",
              "0       0.6         22.0       1007.7        0.0             0\n",
              "1       0.0         25.0       1010.6        0.0             0\n",
              "2       0.0         30.0       1007.6        0.0             0\n",
              "3       0.0         16.0       1017.6        0.0             0\n",
              "4       1.0         33.0       1010.8        0.0             0"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 10
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "otjB4q_NRZCh",
        "colab_type": "text"
      },
      "source": [
        "Finally, we have a dataset we can work with. \n",
        "\n",
        "One important question we should answer is - *How balanced is our dataset?*. Or *How many times did it rain or not rain tomorrow?*:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "A66FQPqEOydL",
        "colab_type": "code",
        "outputId": "83f8aefd-0dc5-4dc0-b0ff-a7e1ad0ef9dd",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 506
        }
      },
      "source": [
        "sns.countplot(df.RainTomorrow);"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAABfMAAAPTCAYAAAAU5ZPWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAWJQAAFiUBSVIk8AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzde5BX5X0/8PdyWW4LwrpcZlUUb5Su\nF2YkrSbUG6QzZuJ4mWrRpKMGgmRaa9VOm1YtJHFCrGWadkST7BrRpMpoR+olMRNFojZiUnGEFJI1\nRhSUuoPigisuuxv29wfd729vX0AXw6m+XjPOnD2f83zOcw7/OO999jkVnZ2dnQEAAAAAAApr0MGe\nAAAAAAAAsHfCfAAAAAAAKDhhPgAAAAAAFJwwHwAAAAAACk6YDwAAAAAABSfMBwAAAACAghPmAwAA\nAABAwQnzAQAAAACg4IT5AAAAAABQcMJ8AAAAAAAoOGE+AAAAAAAUnDAfAAAAAAAKbsjBngDsy4YN\nG7Jr164MHjw4w4YNO9jTAQAAAAD4QHbt2pXf/va3GTZsWH7/93//fY0V5lN4u3btyu7du7N79+60\nt7cf7OkAAAAAAAzIrl273vcYYT6FN3jw4OzevTuDBg3KyJEjD/Z0AAAAAAA+kJ07d2b37t0ZPHjw\n+x4rzKfwhg0blvb29owcOTJTp0492NMBAAAAAPhAGhsb09LS8oG2E/cBXAAAAAAAKDhhPgAAAAAA\nFJwwHwAAAAAACk6YDwAAAAAABfeR/ABuZ2dnXn755axbt670X2NjY9rb25MkK1euzOGHH77PPh0d\nHVm+fHkefvjhbNy4MW1tbamtrc3s2bNz+eWXp7q6ep89tm3blmXLluXxxx/Pli1bUllZmSlTpuTc\nc8/NnDlzMmTIvv8JGhsbc9ddd2X16tV58803c8ghh6Suri5z5szJWWedte8XkmTVqlVZvnx51q9f\nn+3bt6empiannXZaLrvssv36qOyBeBcAAAAAAHwwFZ2dnZ0HexIH2muvvZZZs2aVre9PmP/OO+9k\n7ty5Wbt2bb/18ePHp76+PtOmTSvbY8OGDZk/f362bt3ab3369OlpaGjI6NGjy/ZYsWJFbrzxxtIv\nInq75JJLsmjRovIPkmThwoVZvnx5v7XKysp87Wtfy/nnn192/IF4FwPR9YXnqqqq/frFAwAAAABA\nEQ0k6/zIb7MzadKkfPrTn86MGTPe17hrr702a9euTUVFRRYsWJDHHnssTz/9dBYvXpzRo0dn69at\nufLKK9Pc3Nzv+Obm5ixYsCBbt27NmDFjsnjx4jz99NN57LHHsmDBglRUVOSFF17ItddeW3YOa9as\nyQ033JD29vYcf/zxueOOO7J69eo88MADmT17dpLk3nvvTX19fdke9fX1pSB/9uzZeeCBB7J69erc\ncccdOf7449PW1pbrr78+a9as+dDeBQAAAAAAA/ORDPPHjh2bpUuX5j//8z/z5JNP5tZbb82pp566\n3+OffPLJPPXUU0mSq6++Otdcc00mT56cCRMm5MILL8y3vvWtVFRUpKmpKQ0NDf32qK+vT1NTUyoq\nKnL77bfnwgsvzIQJEzJ58uRcc801ufrqq5MkTz31VOlevX3jG99IR0dHampqcvfdd2fmzJmprq5O\nXV1dbr311nzqU59Kktx2223Ztm1bn/Hbtm3LbbfdliSZOXNmbr311tTV1aW6ujozZ87M3XffnZqa\nmnR0dOTmm2/+0N4FAAAAAAAD85EM86uqqjJ79uyMHz/+A42/5557kiTjxo3L3Llz+9RnzJiRM888\nM0ly//33p6Ojo0e9o6Mj9913X5LkzDPP7PevAubOnZuxY8f2uF93v/jFL7Ju3bokybx58zJu3Lge\n9YqKilx33XVJkp07d+bBBx/s02PFihXZuXNnkj2r6ysqKnrUx40bl3nz5iVJ1q5dm/Xr1/fpMdB3\nAQAAAADAwH0kw/yBaG1tzerVq5Mks2bNSmVlZb/XnXPOOUn2bKfTe4ua5557Ljt27OhxXW+VlZWl\nrXKeeeaZtLa29qivWrWqz716q6ury+TJk5MkTzzxRJ96V4/Jkyenrq5ur8/RX48D8S4AAAAAABg4\nYX4vv/71r7Nr164kez5QW073Wu8V7d1/3p8eu3btyksvvdRvj4kTJ2bSpElle5x88sn9zqH7ua5r\n+jNp0qRMnDix3x4H4l0AAAAAADBwwvxeNm7cWDo+/PDDy15XW1ubQYMG9RnT/edBgwaltra2bI/u\n/cv1OOKII/Y6364e7777bpqamkrnm5qaSlvs7G+PcnPoPdfe9vYuAAAAAAAYOGF+L2+//Xbp+NBD\nDy173dChQzNmzJgke7aX6a/HmDFjMnTo0LI9qqurS8fleuxtDr3r3Xvs73N0r5ebw7567O1dAAAA\n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\nyy+/PNXV1fucw7Zt27Js2bI8/vjj2bJlSyorKzNlypSce+65mTNnToYM2fc/Y2NjY+66666sXr06\nb775Zg455JDU1dVlzpw5Oeuss/brXaxatSrLly/P+vXrs3379tTU1OS0007LZZddlqlTp+5XDwAA\nAAAA3r+Kzs7OzoM9iaJasWJFFi5cmF27dpW9pra2NvX19Tn22GP71N55553MnTs3a9eu7Xfs+PHj\nU19fn2nTppXtv2HDhsyfPz9bt27ttz59+vQ0NDRk9OjRe32OG2+8Me3t7f3WL7nkkixatKjs+CRZ\nuHBhli9f3m+tsrIyX/va13L++efvtccH1djYmJaWllRVVfmlwf86esXGgz0FAOAj4uULphzsKQAA\nwMfGQLJO2+yUsW7duvz93/99du3alerq6vzDP/xDfvjDH2b16tW5//77c+GFFyZJtmzZki996Utp\na2vr0+Paa6/N2rVrU1FRkQULFuSxxx7L008/ncWLF2f06NHZunVrrrzyyjQ3N/c7h+bm5ixYsCBb\nt27NmDFjsnjx4jz99NN57LHHsmDBglRUVOSFF17ItddeW/Y51qxZkxtuuCHt7e05/vjjc8cdd2T1\n6tV54IEHMnv27CTJvffem/r6+rI96uvrS0H+7Nmz88ADD2T16tW54447cvzxx6etrS3XX3991qxZ\ns9/vFwAAAACA/SfML+Puu+/O7t27M2jQoHz729/O5z73uRxzzDGprq7OSSedlMWLF2fOnDlJkk2b\nNuWpp57qMf7JJ58snbv66qtzzTXXZPLkyZkwYUIuvPDCfOtb30pFRUWamprS0NDQ7xzq6+vT1NSU\nioqK3H777bnwwgszYcKETJ48Oddcc02uvvrqJMlTTz3V5/5dvvGNb6SjoyM1NTW5++67M3PmzFRX\nV6euri633nprPvWpTyVJbrvttmzbtq3P+G3btuW2225LksycOTO33npr6urqUl1dnZkzZ+buu+9O\nTU1NOjo6cvPNN3+ANw0AAAAAwL4I88v41a9+lSQ58sgjc9JJJ/V7zXnnnVc6fvnll3vU7rnnniTJ\nuHHjMnfu3D5jZ8yYkTPPPDNJcv/996ejo6NHvaOjI/fdd1+S5Mwzz8yMGTP69Jg7d27Gjh3b437d\n/eIXv8i6deuSJPPmzcu4ceN61CsqKnLdddclSXbu3JkHH3ywT48VK1Zk586dSfb8pUFFRUWP+rhx\n4zJv3rwkydq1a7N+/fo+PQAAAAAAGBhhfhmVlZVJ0ie87m7w4MGl40MPPbR03NramtWrVydJZs2a\nVerV2znnnJNkz3Y6vbeoee6557Jjx44e1/U3x66tcp555pm0trb2qK9atarPvXqrq6vL5MmTkyRP\nPPFEn3pXj8mTJ6eurm6vz1GuBwAAAAAAAyPML6MruH7llVdKq/R7++EPf5hkT6h+6qmnls7/+te/\nLn00d/r06WXv0b3We0V795/3p8euXbvy0ksv9dtj4sSJmTRpUtkeJ598cr9z6H6u65r+TJo0KRMn\nTizbAwAAAACAgRHmlzF//vwMHz48u3fvzpVXXpn/+I//SFNTU1pbW/Ob3/wmX//613PXXXeloqIi\nf/M3f5PDDjusNHbjxo2l48MPP7zsPWprazNo0KA+Y7r/PGjQoNTW1pbt0b1/uR5HHHHEXp+1q8e7\n776bpqam0vmmpqbSFjv726P3HAAAAAAAGLghB3sCRXXEEUfkrrvuyjXXXJMtW7bkb//2b/tcM3Pm\nzFxxxRWZOXNmj/Nvv/126bj79ju9DR06NGPGjElzc3Oam5v77TFmzJgMHTq0bI/q6urScbkee5tD\n73pzc3Nplf3+Pkf3eu85HEgtLS19tiP6uDnllFMO9hQAgI+oj/v/ZwEAQNFZmb8X06dPz9KlS3P8\n8cf3W3/jjTeyefPmPuffe++90vGwYcP2eo+uetcK+N499jV++PDhpeNyPcrt2b+vHt2P9/c53n33\n3b1eBwAAAADA+2dlfhm7d+/OzTffnGXLlmXs2LG58cYbc8YZZ2TMmDH5n//5nzz44IO56667smjR\nojz//PO5+eabS1vm8OGoqqrK1KlTD/Y0AAA+kvwFIAAAfPgaGxvT0tLygcYK88tYunRpli1blmHD\nhuV73/tej9X5hxxySH7v934vRx99dG644YY89NBDOeWUUzJnzpwkyYgRI0rXdn0It5yu+siRI3uc\n7+qxr/Gtra2l4/56tLe3p62t7QP16H68v88xatSovV4HAAAAAMD7Zyl5P9ra2rJs2bIkyWc/+9my\n2+z8yZ/8SenDsPfdd1/p/Lhx40rHb731Vtn7tLe3Z8eOHUmSsWPH9qh19dixY0c6OjrK9ti2bVvp\nuFyPvc2hd717j/19ju713nMAAAAAAGDghPn9eOmll0p/6nDCCSeUva6ioqJU/81vflM6P2XKlNLx\na6+9Vnb8li1bsnv37j5juv+8e/fuvP7662V7dO9frkd/+/r312PUqFGlj98myYQJE0qr8/e3R+85\nAAAAAAAwcML8fnTfUqazs3Ov13aF8RUVFaVzxx13XOmDsGvXri079oUXXigd19XV9ah1/3l/egwb\nNizHHntsvz2amprS1NRUtkdX/95zqKioKJ1bt25d2fFvvPFGqX/vHgAAAAAADJwwvx/jx48vHa9f\nv77sdZ2dnaV6bW1t6fzw4cNz2mmnJUlWrlxZds/6H/3oR0n2bE3T+4NjM2bMyJgxY3pc11tbW1ue\neOKJJMknP/nJDB8+vEf9rLPOKh0/+uij/fbYsGFDNm3alCQ5++yz+9S7erz66qv55S9/udfnKNcD\nAAAAAICBEeb34/DDD8/kyZOTJD/4wQ/y0ksv9Xvdv//7v5e2l/mjP/qjHrVLL700yZ497e+8884+\nY9esWZOf/OQnSZKLLrooQ4b0/BbxkCFDcvHFFydJVq1alTVr1vTpceedd5b2zO+6X3cnnnhiTjrp\npCRJQ0NDmpube9Q7OzuzZMmSJHs+dnveeef16XHBBReUttpZsmRJn79UaG5uTkNDQ5Lk5JNPtjIf\nAAAAAOBDMHjRokWLDvYkimjMmDF5/PHH09HRkUcffTQjRozIuHHjUlFRkVdeeSV33HFHvvnNb6az\nszOjR4/OP/3TP6Wqqqo0/qijjsq6devy6quv5mc/+1k6Ojpy2GGHpa2tLT/+8Y/z5S9/Oa2trZk4\ncWJuueWWPqvqkz1b1jz88MNpaWnJ448/npqamtTU1GTbtm357ne/m6VLl6azszOnn356rrrqqn6f\n45hjjsmDDz6YlpaWPPXUUznyyCNTVVWVV155JV/96lezatWqJMnVV1+dmTNn9hk/YsSIDB48OM88\n80w2bdqUF198MVOmTMngwYPz/PPP57rrrsvmzZszZMiQLFmypMdfKBwob731Vtra2lJZWZmampoD\n3v//on/5VfO+LwIA2A9XTxt3sKcAAAAfGwPJOis697Up/MfY0qVLc+utt5b2xe9PdXV1/vVf/zWf\n+MQn+tR27NiRefPmld3zfvz48amvr8+0adPK9t+wYUPmz5+frVu39lufPn16GhoaMnr06LI9VqxY\nkRtvvDHt7e391ufMmZOvfOUrZccnycKFC7N8+fJ+a0OHDs1NN92U888/f689PqjGxsa0tLSkqqoq\n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\naVMGDx6cMWPG5OMf/3hOPvnkTs0AAAAAAODNqVSr1erh3kRX8Xd/93d54IEHWn/eX8z/3e9+l2nT\npmX58uXtrg8ZMiRz5szJKaec0uH7rVy5MpdffnkaGxvbXR81alTmzp2bvn37djijoaEhM2fOzM6d\nO9tdv+iii/KFL3yhw+uT5KabbsrChQvbXevRo0e++MUv5oILLtjvjIOxevXqbNmyJX369PEfDv7X\n8Q1rDvcWAIC3iOcnH3e4twAAAG8bB9M6PWankx5//PE88MADOfbYYzt1/rXXXpvly5enUqlkxowZ\neeihh7J48eLceuut6du3bxobG/OpT32q9S7/tpqbmzNjxow0NjamX79+ufXWW7N48eI89NBDmTFj\nRiqVSp566qlce+21He5h2bJl+fznP5+dO3fmpJNOyt13352lS5fmvvvuy8SJE5Mk9957b+bMmdPh\njDlz5rSG/IkTJ+a+++7L0qVLc/fdd+ekk07Kjh07cuONN2bZsmWd+r0AAAAAAPDGifmd8Oqrr7be\nvT5z5swDnv/oo4/mscceS5JcffXVueaaazJixIgMHTo0U6ZMyV133ZVKpZL169dn7ty57c6YM2dO\n1q9fn0qlkjvvvDNTpkzJ0KFDM2LEiFxzzTW5+uqrkySPPfZY63u1NWvWrLS0tGTw4MFZsGBBxo0b\nl0GDBqW+vj633357xo4dmyS544470tTUtM/1TU1NueOOO5Ik48aNy+233576+voMGjQo48aNy4IF\nCzJ48OC0tLTkK1/5ygF/LwAAAAAAvDlifid87Wtfy9q1a/OXf/mXOfvssw94/j333JMkGThwYKZN\nm7bP+ujRozN+/Pgkybe//e20tLTstd7S0pJvfetbSZLx48dn9OjR+8yYNm1aBgwYsNf77emZZ57J\n008/nSSZPn16Bg4cuNd6pVLJddddlyTZtm1bvvvd7+4zo6GhIdu2bUvy+r80qFQqe60PHDgw06dP\nT5IsX748K1as2GcGAAAAAAAHT8w/gFWrVuXrX/96evfunRtvvPGA52/fvj1Lly5Nkpx77rnp0aNH\nu+edd955SV5/nE7bR9T89Kc/zebNm/c6r60ePXq0PirniSeeyPbt2/daX7Ro0T7v1VZ9fX1GjBiR\nJHnkkUf2Wd89Y8SIEamvr9/v5+hoBgAAAAAAB0/M349du3Zl5syZaWlpydVXX51hw4Yd8Jpnn302\nr732WpLXv6C2I3uutb2jfc+fOzPjtddey3PPPdfujGHDhuXoo4/ucMbpp5/e7h72fG33Oe05+uij\nW38v7swHAAAAAKgNMX8/FixYkGeeeSb19fX56Ec/2qlr1qxZ03p8zDHHdHje8OHD061bt32u2fPn\nbt26Zfjw4R3O2HN+BfwyhAAAIABJREFURzMO9IW9u2ds3bo169evb319/fr1rY/Y6eyMtnsAAAAA\nAODQqDvcGyjVunXr8k//9E/p1q1bvvCFL+SII47o1HUbN25sPX7HO97R4Xndu3dPv3790tzcnObm\n5nZn9OvXL927d+9wxqBBg1qPO5qxvz20XW9ubm69y76zn2PP9bZ7ONS2bNmyzyOJ3m7e+973Hu4t\nAABvUW/3v2cBAEDp3JnfgVtuuSXbtm3L1KlTc9ppp3X6uldffbX1uGfPnvs9d/f67jvg28440PW9\nevVqPe5oRkfP7D/QjD2PO/s5tm7dut/zAAAAAAB4c9yZ347/+q//yqJFizJkyJBce+21h3s7/K8+\nffrk5JNPPtzbAAB4S/IvAAEAoPZWr16dLVu2vKlr3ZnfxubNm/PlL385SXL99denb9++b+j6I488\nsvV49xfhdmT3+lFHHdXujANdv3379tbjjmbs2LHjTc3Y87izn6N37977PQ8AAAAAgDdHzG/j9ttv\nT2NjY8aOHZsPfvCDb/j6gQMHth6/8sorHZ63c+fObN68OUkyYMCAdmds3rw5LS0tHc5oampqPe5o\nxv720HZ9zxmd/Rx7rrfdAwAAAAAAh4bH7LTx8ssvJ0mWLFlywEe6NDQ0pKGhIUnyL//yL5k4cWKO\nO+64fWa1Z926ddm1a1eS7HXNnj/v2rUrv/rVr/Kud71rv3vtaMaLL76YtWvX7vcz7J7Ru3fv1i+/\nTZKhQ4fmqKOOyrZt2zo9o+0eAAAAAAA4NNyZf4ideOKJrV8Iu3z58g7Pe+qpp1qP6+vr91rb8+fO\nzOjZs2dOOOGEdmesX78+69ev73DG7vlt91CpVFpfe/rppzu8/je/+U3r/LYzAAAAAAA4NMT8Nm64\n4Yb853/+537/7DZhwoTW1973vvclSXr16pUxY8YkSR5++OEOn1n//e9/P8nrj6Zp+2Vjo0ePTr9+\n/fY6r60dO3bkkUceSZK8//3vT69evfZanzBhQuvx9773vXZnrFy5Mi+99FKS5JxzztlnffeMF198\nMatWrdrv5+hoBgAAAAAAB0/Mb+PYY4/NKaecst8/uw0YMKD1tT2/KPfiiy9O8voz7efNm7fPeyxb\ntiw/+tGPkiQf/vCHU1e399OO6urqcuGFFyZJFi1alGXLlu0zY968ea3PzN/9fns69dRTc9pppyVJ\n5s6dm+bm5r3Wq9VqbrvttiSvf9nthz70oX1mTJ48ufWLcG+77bZUq9W91pubmzN37twkyemnn+7O\nfAAAAACAGhHza+Dss8/OWWedlSSZPXt2Zs+enbVr16axsTENDQ254oorsmvXrgwbNizTp09vd8Yn\nP/nJDBs2LLt27coVV1yRhoaGNDY2Zu3atfnqV7+a2bNnJ0nOOuus1vdq6/rrr09dXV0aGxtzySWX\nZMmSJWlqasqqVaty1VVX5fHHH0+SXHnllRk0aNA+1w8aNChXXnllkmTx4sW56qqrsmrVqjQ1NWXJ\nkiW55JJL0tjYmLq6unzuc5876N8bAAAAAADtq1Tb3m7NAe3+YtzJkydn1qxZ7Z6zefPmTJ8+vcNn\n3g8ZMiRz5szZ607/tlauXJnLL788jY2N7a6PGjUqc+fO3etfBbTV0NCQmTNnZufOne2uT506NTff\nfHOH1yfJTTfdlIULF7a71r1793zpS1/KBRdcsN8ZB2P16tXZsmVL+vTpc8AvJX67OL5hzeHeAgDw\nFvH85OMO9xYAAOBt42BaZ92BT+HN6NevX+65554sXLgw999/f9asWZOdO3dm+PDhOffcc3PZZZe1\nezf8nkaOHJn7778/8+bNy8MPP5x169ale/fuOf744zNp0qRMnTp1n0f0tDV58uSMHDky8+fPz5NP\nPpnGxsb0798/9fX1ueiii/Z6tn5Hbr755owfPz733ntvVqxYkU2bNmXIkCE588wzc+mllwrsAAAA\nAAA15s58iufO/H25Mx8AOFTcmQ8AAP93DqZ1emY+AAAAAAAUTswHAAAAAIDCifkAAAAAAFA4MR8A\nAAAAAAon5gMAAAAAQOHEfAAAAAAAKJyYDwAAAAAAhRPzAQAAAACgcGI+AAAAAAAUTswHAAAAAIDC\nifkAAAAAAFA4MR8AAAAAAAon5gMAAAAAQOHEfAAAAAAAKJyYDwAAAAAAhRPzAQAAAACgcGI+AAAA\nAAAUTswHAAAAAIDCifkAAAAAAFA4MR8AAAAAAAon5gMAAAAAQOHEfAAAAAAAKJyYDwAAAAAAhRPz\n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\nZ+7cue3uYc6cOVm/fn0qlUruvPPOTJkyJUOHDs2IESNyzTXX5Oqrr06SPPbYY63v1dasWbPS0tKS\nwYMHZ8GCBRk3blwGDRqU+vr63H777Rk7dmyS5I477khTU9M+1zc1NeWOO+5IkowbNy6333576uvr\nM2jQoIwbNy4LFizI4MGD09LSkq985Stv8LcMAAAAAEBniPkduOmmmzJkyJAO1ydNmpSTTjopSdoN\n6ffcc0+SZODAgZk2bdo+66NHj8748eOTJN/+9rfT0tKy13pLS0u+9a1vJUnGjx+f0aNH7zNj2rRp\nGTBgwF7vt6dnnnkmTz/9dJJk+vTpGThw4F7rlUol1113XZJk27Zt+e53v7vPjIaGhmzbti3J6//S\noFKp7LU+cODATJ8+PUmyfPnyrFixYp8ZAAAAAAAcHDH/IJx44olJkt/+9rd7vb59+/YsXbo0SXLu\nueemR48e7V5/3nnnJXn9cTptH1Hz05/+NJs3b97rvLZ69OjR+qicJ554Itu3b99rfdGiRfu8V1v1\n9fUZMWJEkuSRRx7ZZ333jBEjRqS+vn6/n6OjGQAAAAAAHBwx/yBs2LAhSfb58tlnn302r732WpLX\nv6C2I3uutb2jfc+fOzPjtddey3PPPdfujGHDhuXoo4/ucMbpp5/e7h72fG33Oe05+uijM2zYsA5n\nAAAAAABwcMT8N2nDhg352c9+liR5z3ves9famjV/+HbmY445psMZw4cPT7du3fa5Zs+fu3XrluHD\nh3c4Y8/5Hc049thjO7x+zxlbt27d68t8169f3/qInc7OaLsHAAAAAAAOXt3h3kBXddttt2Xnzp1J\nkosuumivtY0bN7Yev+Md7+hwRvfu3dOvX780Nzenubm53Rn9+vVL9+7dO5wxaNCg1uOOZuxvD23X\nm5ubW++y7+zn2HO97R4OpS1btuzzOKK3m/e+972HewsAwFvU2/3vWfyBv3MCALXi75wHx535b8L9\n99+f++67L0lyzjnn5M///M/3Wn/11Vdbj3v27LnfWbvXd98B33bGga7v1atX63FHMzp6Zv+BZux5\n3NnPsXXr1v2eBwAAAADAG+fO/Dfo6aefzsyZM5Mk73znO/P//t//O8w7evvo06dPTj755MO9DQCA\ntyR3YwMAUGv+zpmsXr06W7ZseVPXujP/DXj++edz+eWXZ/v27RkwYEDmzp2712NudjvyyCNbj3d/\n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\ndWu3CAAAAPyeTOYDAAAAAEDBOQAXAAAAAAAKTpgPAAAAAAAFJ8wHAAAAAICCE+YDAAAAAEDBCfMB\nAAAAAKDghPkAAAAAAFBwwnwAAAAAACg4YT4AAAAAABScMB8AAAAAAApOmA8AAAAAAAUnzAcAAAAA\ngIIT5gMAAAAAQMEJ8wEAAAAAoOCE+QAAQJLkhhtuSHV1daqrq1u7FQAA4BPat3YDAABwMFq+fHlG\njBjR5Fr79u3TtWvX9OnTJ4MHD85FF13U5gP25j7v72L06NGZNGlSC3QEAABti8l8AAAomG3btqW+\nvj4LFizIfffdl1GjRuWHP/xha7cFAAC0ooqGhoaG1m4CAAAONjtPqg8cODATJ04sr23atCnLly/P\n008/nWeeeab8+M0335yxY8fu915bwtatW7N06dLdrt94441ZsGBBkuSee+7JUUcd1WRdt27d0qtX\nr33SIwAAFJltdgAAoJVVVlamf//+jR476aST8pWvfCU1NTWZMGFCkuSf/umfcumll6Zdu3at0eZe\n6dChwy6fcWeVlZXl6379+qVPnz77oy0AAGgzbLMDAAAFdvHFF5eD7bVr16a2traVOwIAAFqDyXwA\nACiwioqKDBgwIMuXL0+SrFy5MieddNIude+9915mzpyZl19+OYsXL87q1auzbdu2dOvWLSeccEJG\njBiRCy+8MJ06ddrte91www157LHHkiSLFi3a4/rWrVvzwAMP5Mc//nHefffdbN26NX369Mk555yT\nP/uzP0vXrl1b4hbsUV1dXaZPn54XXnghK1asyKZNm1JVVZVBgwblvPPOyznnnLPb5z777LO56qqr\nknz8mw9nnXVWZs6cmQcffDBvvPFGNmzYkN69e2fkyJEZN25co880d+7cTJ8+PfPnz8/q1avTo0eP\nnH766bn66qvTs2fPPfb90ksv5ZFHHskvfvGLvP/++2nfvn3+4A/+IEOHDs1ll12Wfv367fa548eP\nz3PPPZfDDjssc+fOzfr16zN9+vQ8++yzWbFiRerr63P11Vfn29/+dpLka1/7Wt54442ccMIJ+e//\n/u/U1dXl/vvvz6xZs/Lee+9lw4YNmThxYi644IIWubc333xzHn744XTu3Dk///nP07Fjx11qRo4c\nmSVLliRJrr322vzFX/zFLjVPPPFEvvOd7yRJpk+fnlNPPXWP9xUA4EAlzAcAgILbeVudprbYqa+v\nz/Dhw9PUcVjvv/9+Xnjhhbzwwgu5//77c9ddd+WYY47Z657WrFmTK664orzPfcnixYuzePHizJw5\nM9OnT09VVdVev1dzHn/88dx8883ZtGlTo8fr6uoyc+bMzJw5M6eddlr+8R//MYcddlizr9XQ0JAb\nb7wxjz76aKPH33777UyePDnPP/987r333hx++OGZMmVKpkyZ0uiev/fee6mpqcmsWbPywAMP5A//\n8A+bfJ/Nmzfn+uuvz1NPPbXL40uWLMmSJUtSU1OT7373uxk3btwe78GSJUtyxRVXZOXKlXusTZJX\nXnkl3/72t1NfX99s3d7c2yFDhuThhx/Opk2bMm/evF1C+NWrV5eD/CSZM2dOk2H+nDlzkiSdO3fO\n5z73uU/1+QAADlTCfAAAKLidQ8+m9pLfsWNHDjnkkAwZMiRf/OIX079//3Tv3j0fffRRli9fnh//\n+Md58cUX89Zbb2X8+PF55JFHmpyU/l1cddVVWbRoUS699NKMGDEi3bt3z7JlyzJ16tTMnz8/ixcv\nzu23355Jkybt1fs05/nnn891112XhoaGdOjQIWPGjMkZZ5yRrl275q233sq9996bhQsX5qWXXsq3\nvvWt3H///c2eNzB16tTMmzcvw4cPz4UXXpjevXunrq4u99xzT+bOnZva2tpMnjw51dXVmTx5cgYP\nHpwxY8akX79+WbduXf7zP/8zzz77bOrq6vJ3f/d3ueuuu5p8n+uuu658sPExxxyTP//zP8+AAQOy\nZcuWzJ49O9OmTcvGjRszceLEdOrUKZdccslue962bVuuuuqqrF69OmPHjs3w4cNzxBFHZMWKFU3+\nFsbatWtzzTXXZOvWrbnyyitz2mmnpbKyMu+8806jf1t7e2+HDBlSvp4zZ84uYX4ppC957bXXsmXL\nll3+XZbqBg8evNf/ZgEA2jphPgAAFNgLL7yQN998M0ly3HHH5YQTTtilpmvXrvnJT37S5CT4ySef\nnFGjRuW//uu/ctNNN+XNN9/Mk08+mdGjR+9VX/Pnz8/dd9+d0047rfzYiSeemNNPPz0XXnhhlixZ\nkieeeCJ//dd/ne7du+/VezVl06ZNufnmm8th87Rp0xoFxn/8x3+ckSNHZvz48fmf//mfvPbaa5k+\nfXqzk+7z5s3Lt771rfK2LkkyYMCADBs2LKNGjcpbb72VBx98MO3atct5552XO+64I4cc8ttjyE47\n7bRcfvnlmT17dn72s59l+fLlu/zw5ZlnnikH+QMHDsy///u/N9q65+STT86Xv/zljBkzJr/5zW8y\nadKkjBgxIkcddVSTPX/00UdZsWJF/u3f/i2nnHJKo76bUldXl8MPPzwPPfRQjj/++Eb3qyXvbY8e\nPXL88cdnyZIlmTNnTq655ppGfZRC+tNPPz0vvfRSkxP8K1euzLJly5I0/uEAAMDBygG4AABQMKXt\nVqZMmZKrr746SdKhQ4fceOONqaio2KW+Y8eOu93SpeSiiy7KiSeemCSZOXPmXvc4ZsyYRkF+SefO\nnTNmzJgkydatWzNv3ry9fq+mPPHEE/nggw+SJJdffnmTe6l36NAhkyZNSmVlZZLkvvvua/Y1+/Xr\nl7/6q7/a5fGOHTvm61//epKP/27at2+fW2+9tVGQn3x8vsGll16a5OMte+bOnbvLa5V6OOSQQ3LH\nHXc0ea5A//79y31s2rQpDz74YLN9X3rppY2C/D25+uqrGwX5n9RS97YUwM+fPz8fffRRo7VSmH/G\nGWdk0KBBSZLZs2c3WbPzawEAHMyE+QAA0MpeeeWVVFdXl79OOumkjBw5MpMnT85HH32U/v3751/+\n5V/ypS996VO93o4dO1JXV5e33347b775ZvmrNN29cOHCve75/PPP3+3azlPepcnqlvbiiy+Wry++\n+OLd1h155JE5++yzkyQrVqzI0qVLd1v7la98Zbfb8Oz8GxHDhw9Ply5dmqz77Gc/W74uHVpcsnHj\nxvziF79I8vEE/mc+85nd9jJ69Oh07tw5SePP2pTm/i6act555zW73lL3thTAb926tdEPNlasWFG+\nN0OGDCnXfXLrndKfu3btmoEDBzbbMwDAwUCYDwAABdahQ4dccMEFGTZsWLN127dvz8MPP5zLLrss\nn//85/OlL30p5557bs4777zy109/+tMkH++bvreOO+643a4dccQR5esNGzbs9Xs1pbT1UM+ePZs8\nR2Bnn//858vXixYt2m1dc5/p8MMP/1R1Ox8E+8nPvmTJkmzfvj1J9niYa2VlZaqrq/fYc0VFRbnu\n0+jVq9cetz1qqXt76qmnln97YeegvjSB36tXrxx33HH5whe+kCT5v//7v2zcuLFc9/LLLydJTjnl\nlGbPOgAAOFjYMx8AAFrZwIEDM3HixPKf165dm1/+8pe57777snLlykyaNCm//vWvc/311zf5/PXr\n1+eKK64oT33vyaZNm/a659L2Kk3ZeSugHTt27PV7NaW+vj7Jx3uz70nPnj13eV5TDj300N2u7byl\nTmlifk91peC+qff+NH2XajZu3Njk4bClnjt06LDH1yrp1q3bHmta6t5269Ytn/3sZ1NbW9sozC9d\nlybyP/e5z6Vz587ZtGlTfv7zn+f000/PO++8k1WrVjWqAwA42JnMBwCAVlZZWZn+/fuXv77whS/k\n8ssvz4wZM8pbsUybNi0/+9nPmnz+9773vUbbt/zDP/xDnnnmmbz22mtZuHBhFi1alEWLFuVrX/va\nfvtM7B+/68T6J/f539dKU/cLFy7M+vXrk/x24r4U0nfs2DGDBw9O8tug3375AAC7EuYDAEBBdevW\nLT/4wQ/KAez3vve9bN26tVHNhg0b8vjjjydJBg8enOnTp2fkyJHp169funTp0ii8/c1vfrP/mt/H\nSlv5vP/++3usXb169S7Paw07v/en6btUU1lZ2eRU/r7Skve2FMRv3749L7/8ct566638+te/brS2\n83Up6C/9t6qq6nfaRggA4EAmzAcAgAI78cQTyxP177zzTh5++OFG6++880454D/33HN3O3nd0NCQ\nBQsW7Ntm96NSwLt69eqsWLGi2dqdtx/a+SDb/e34449P+/Yf73Q6b968Zms3btxY3oN+f4fZLXlv\nTz755PI2QHPmzClP3Pft2ze9e/cu15XC/IULF2bt2rXlMP/UU09ttG0TAMDBTJgPAAAFN378+HII\nfNddd2XLli3ltZ33ZW9uL/xnn3220RR1W/fFL36xfP3QQw/ttm7NmjX5yU9+kiTp06dP+vXrt69b\n263KysrygbFz587N22+/vdvaGTNmlP8+93T4cUtryXvbpUuXDBw4MMnH0/alkH7o0KGN6gYOHJiu\nXbtmx44d+Y//+I988MEHSWyxAwCwM2E+AAAUXN++fXP++ecnSVatWtVoOr9v377lafwnn3yyUdBf\nsnTp0tx66637p9n9ZOTIkTnyyCOTfHyewNy5c3ep2bZtW/7mb/4mGzduTJL86Z/+6X7tsSmlHnbs\n2JEbbrghH3744S41S5YsyY9+9KMkHx+2e/HFF+/XHlv63pYC+cWLF+fFF19s9FhJu3btcsoppyRJ\n7r333l2eCwCAMB8AANqEv/zLvywfdvqv//qv5dC+qqoqZ5xxRpLkjTfeyCWXXJLHH3888+fPz8sv\nv5wf/vCHufDCC7N+/foMGDCgtdpvcZ07d85tt92WioqKbNmyJZdffnluv/32zJkzJwsWLMiMGTPy\n9a9/PbNmzUry8XkCl112WSt3nZxzzjn58pe/nCR5/fXXM3r06NTU1GT+/Pl59dVXM2XKlPzJn/xJ\n1q1blyS54YYb0rNnz/3aY0vf21Ig39DQkA0bNqSioqJ8MG5TdaWDcnv16pXjjjuupT8eAECb1b61\nGwAAAPasNJ3/2GOPlafzx4wZkyS55ZZbsnjx4ixbtiwLFizId7/73UbPrayszA9+8IM899xzqa2t\nbY3294kzzzwzd9xxR/72b/82mzZtyrRp0zJt2rRd6oYOHZrJkyeXfxjS2r7//e/nkEMOyVNPPZV3\n3303EyZM2KWmffv2ue6663LJJZe0Qocte28HDx6cTp06ZfPmzUmSP/qjPypP/u/sk1P4TQX+AAAH\nM5P5AADQRuxuOr9Xr1559NFHc+WVV+b4449Pp06dUllZmWOPPTZjx47NjBkzcvbZZ7dm6/vM+eef\nn5kzZ+aKK67ICSeckMMOOywdOnRIr169cvbZZ2fy5Mm59957c9hhh7V2q2WdOnXKj370o0ybNi1f\n/epX07t373Ts2DGVlZX5zGc+k7Fjx+bJJ5/MuHHjWrXPlrq3HTt2LJ8VkOw+pK+urk5VVVX5z7bY\nAQBorKKhoaGhtZsAAAAAAAB2z2Q+AAAAAAAUnDAfAAAAAAAKTpgPAAAAAAAFJ8wHAAAAAICCE+YD\nAAAAAEDBCfMBAAAAAKDghPkAAAAAAFBwwnwAAAAAACg4YT4AAAAAABScMB8AAAAAAApOmA8AAAAA\nAAUnzAcAAAAAgIIT5gMAAAAAQMEJ8wEAAAAAoOCE+QAAAAAAUHDCfAAAAAAAKDhhPgAAAAAAFJww\nHwAAAAAACk6YDwAAAAAABff/wqfCYTee3YoAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 864x576 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "image/png": {
              "width": 761,
              "height": 489
            }
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ME9fnVlg0m3F",
        "colab_type": "code",
        "outputId": "7e64a992-c4ed-4bb0-faa6-434fb353b76e",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 68
        }
      },
      "source": [
        "df.RainTomorrow.value_counts() / df.shape[0]"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "0    0.778762\n",
              "1    0.221238\n",
              "Name: RainTomorrow, dtype: float64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 12
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "NnJbP0QMUU_h",
        "colab_type": "text"
      },
      "source": [
        "Things are not looking good. About 78% of the data points have a non-rainy day for tomorrow. This means that a model that predicts there will be no rain tomorrow will be correct about 78% of the time.\n",
        "\n",
        "You can read and apply the [Practical Guide to Handling Imbalanced Datasets](https://www.curiousily.com/posts/practical-guide-to-handling-imbalanced-datasets/) if you want to mitigate this issue. Here, we'll just hope for the best.\n",
        "\n",
        "The final step is to split the data into train and test sets:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "RdI7qBpgNTr7",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "X = df[['Rainfall', 'Humidity3pm', 'RainToday', 'Pressure9am']]\n",
        "y = df[['RainTomorrow']]\n",
        "\n",
        "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=RANDOM_SEED)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "LwFOIU-KWt8b",
        "colab_type": "text"
      },
      "source": [
        "And convert all of it to Tensors (so we can use it with PyTorch):"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "GGOBFwarzrts",
        "colab_type": "code",
        "outputId": "5918e82d-77f9-4fc8-fa95-b1e2b1997a91",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 51
        }
      },
      "source": [
        "X_train = torch.from_numpy(X_train.to_numpy()).float()\n",
        "y_train = torch.squeeze(torch.from_numpy(y_train.to_numpy()).float())\n",
        "\n",
        "X_test = torch.from_numpy(X_test.to_numpy()).float()\n",
        "y_test = torch.squeeze(torch.from_numpy(y_test.to_numpy()).float())\n",
        "\n",
        "print(X_train.shape, y_train.shape)\n",
        "print(X_test.shape, y_test.shape)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "torch.Size([99751, 4]) torch.Size([99751])\n",
            "torch.Size([24938, 4]) torch.Size([24938])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "WS3p73do3T4X",
        "colab_type": "text"
      },
      "source": [
        "## Building a Neural Network\n",
        "\n",
        "We'll build a simple Neural Network (NN) that tries to predicts will it rain tomorrow. \n",
        "\n",
        "Our input contains data from the four columns: `Rainfall, Humidity3pm, RainToday, Pressure9am`. We'll create an appropriate input layer for that.\n",
        "\n",
        "The output will be a number between 0 and 1, representing how likely (our model thinks) it is going to rain tomorrow. The prediction will be given to us by the final (output) layer of the network. \n",
        "\n",
        "We'll two (hidden) layers between the input and output layers. The parameters (neurons) of those layer will decide the final output. All layers will be fully-connected.\n",
        "\n",
        "One easy way to build the NN with PyTorch is to create a class that inherits from `torch.nn.Module`:\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "h1XNn_zmN7C_",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "class Net(nn.Module):\n",
        "\n",
        "  def __init__(self, n_features):\n",
        "    super(Net, self).__init__()\n",
        "    self.fc1 = nn.Linear(n_features, 5)\n",
        "    self.fc2 = nn.Linear(5, 3)\n",
        "    self.fc3 = nn.Linear(3, 1)\n",
        "\n",
        "  def forward(self, x):\n",
        "    x = F.relu(self.fc1(x))\n",
        "    x = F.relu(self.fc2(x))\n",
        "    return torch.sigmoid(self.fc3(x))"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "iVF6WoxRl6bT",
        "colab_type": "code",
        "outputId": "90b6a80e-e088-4dc7-b730-ea1ff4e28833",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 612
        }
      },
      "source": [
        "net = Net(X_train.shape[1])\n",
        "\n",
        "ann_viz(net, view=False)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<graphviz.dot.Digraph at 0x7f33aafda048>"
            ],
            "image/svg+xml": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n<!-- Generated by graphviz version 2.40.1 (20161225.0304)\n -->\n<!-- Title: g Pages: 1 -->\n<svg width=\"424pt\" height=\"443pt\"\n viewBox=\"0.00 0.00 424.00 443.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 439)\">\n<title>g</title>\n<polygon fill=\"#ffffff\" stroke=\"transparent\" points=\"-4,4 -4,-439 420,-439 420,4 -4,4\"/>\n<g id=\"clust1\" class=\"cluster\">\n<title>cluster_input</title>\n<polygon fill=\"none\" stroke=\"#ffffff\" points=\"0,-49 0,-385 84,-385 84,-49 0,-49\"/>\n<text text-anchor=\"middle\" x=\"42\" y=\"-56.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Input Layer</text>\n</g>\n<g id=\"clust2\" class=\"cluster\">\n<title>cluster_1</title>\n<polygon fill=\"none\" stroke=\"#ffffff\" points=\"92,-8 92,-427 199,-427 199,-8 92,-8\"/>\n<text text-anchor=\"middle\" x=\"145.5\" y=\"-15.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Hidden Layer 1</text>\n</g>\n<g id=\"clust3\" class=\"cluster\">\n<title>cluster_2</title>\n<polygon fill=\"none\" stroke=\"#ffffff\" points=\"207,-91 207,-344 314,-344 314,-91 207,-91\"/>\n<text text-anchor=\"middle\" x=\"260.5\" y=\"-98.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Hidden Layer 2</text>\n</g>\n<g id=\"clust4\" class=\"cluster\">\n<title>cluster_output</title>\n<polygon fill=\"none\" stroke=\"#ffffff\" points=\"322,-174 322,-261 416,-261 416,-174 322,-174\"/>\n<text text-anchor=\"middle\" x=\"369\" y=\"-181.8\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#000000\">Output Layer</text>\n</g>\n<!-- 1 -->\n<g id=\"node1\" class=\"node\">\n<title>1</title>\n<ellipse fill=\"#ff006d\" stroke=\"#ff006d\" cx=\"41.5\" cy=\"-353\" rx=\"23.5\" ry=\"23.5\"/>\n<text text-anchor=\"middle\" x=\"41.5\" y=\"-349.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#ff006d\">1</text>\n</g>\n<!-- 5 -->\n<g id=\"node5\" class=\"node\">\n<title>5</title>\n<ellipse fill=\"#01befe\" stroke=\"#01befe\" cx=\"145.5\" cy=\"-146\" rx=\"23.5\" ry=\"23.5\"/>\n<text text-anchor=\"middle\" x=\"145.5\" y=\"-142.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#01befe\">5</text>\n</g>\n<!-- 1&#45;&gt;5 -->\n<g id=\"edge1\" class=\"edge\">\n<title>1&#45;&gt;5</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M52.2381,-331.627C72.2189,-291.8576 114.8838,-206.9379 134.8203,-167.2567\"/>\n</g>\n<!-- 6 -->\n<g id=\"node6\" class=\"node\">\n<title>6</title>\n<ellipse fill=\"#01befe\" stroke=\"#01befe\" cx=\"145.5\" cy=\"-63\" rx=\"23.5\" ry=\"23.5\"/>\n<text text-anchor=\"middle\" x=\"145.5\" y=\"-59.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#01befe\">6</text>\n</g>\n<!-- 1&#45;&gt;6 -->\n<g id=\"edge5\" class=\"edge\">\n<title>1&#45;&gt;6</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M49.488,-330.7257C68.8467,-276.7449 118.0981,-139.409 137.4848,-85.3502\"/>\n</g>\n<!-- 7 -->\n<g id=\"node7\" class=\"node\">\n<title>7</title>\n<ellipse fill=\"#01befe\" stroke=\"#01befe\" cx=\"145.5\" cy=\"-395\" rx=\"23.5\" ry=\"23.5\"/>\n<text text-anchor=\"middle\" x=\"145.5\" y=\"-391.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#01befe\">7</text>\n</g>\n<!-- 1&#45;&gt;7 -->\n<g id=\"edge9\" class=\"edge\">\n<title>1&#45;&gt;7</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M63.3018,-361.8046C80.9324,-368.9246 105.6506,-378.907 123.3687,-386.0624\"/>\n</g>\n<!-- 8 -->\n<g id=\"node8\" class=\"node\">\n<title>8</title>\n<ellipse fill=\"#01befe\" stroke=\"#01befe\" cx=\"145.5\" cy=\"-312\" rx=\"23.5\" ry=\"23.5\"/>\n<text text-anchor=\"middle\" x=\"145.5\" y=\"-308.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#01befe\">8</text>\n</g>\n<!-- 1&#45;&gt;8 -->\n<g id=\"edge13\" class=\"edge\">\n<title>1&#45;&gt;8</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M63.5557,-344.305C81.2049,-337.3471 105.8353,-327.637 123.4761,-320.6825\"/>\n</g>\n<!-- 9 -->\n<g id=\"node9\" class=\"node\">\n<title>9</title>\n<ellipse fill=\"#01befe\" stroke=\"#01befe\" cx=\"145.5\" cy=\"-229\" rx=\"23.5\" ry=\"23.5\"/>\n<text text-anchor=\"middle\" x=\"145.5\" y=\"-225.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#01befe\">9</text>\n</g>\n<!-- 1&#45;&gt;9 -->\n<g id=\"edge17\" class=\"edge\">\n<title>1&#45;&gt;9</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M56.6225,-334.9693C76.3402,-311.4598 110.6326,-270.5727 130.3593,-247.0524\"/>\n</g>\n<!-- 2 -->\n<g id=\"node2\" class=\"node\">\n<title>2</title>\n<ellipse fill=\"#ff006d\" stroke=\"#ff006d\" cx=\"41.5\" cy=\"-270\" rx=\"23.5\" ry=\"23.5\"/>\n<text text-anchor=\"middle\" x=\"41.5\" y=\"-266.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#ff006d\">2</text>\n</g>\n<!-- 2&#45;&gt;5 -->\n<g id=\"edge2\" class=\"edge\">\n<title>2&#45;&gt;5</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M56.6225,-251.9693C76.3402,-228.4598 110.6326,-187.5727 130.3593,-164.0524\"/>\n</g>\n<!-- 2&#45;&gt;6 -->\n<g id=\"edge6\" class=\"edge\">\n<title>2&#45;&gt;6</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M52.2381,-248.627C72.2189,-208.8576 114.8838,-123.9379 134.8203,-84.2567\"/>\n</g>\n<!-- 2&#45;&gt;7 -->\n<g id=\"edge10\" class=\"edge\">\n<title>2&#45;&gt;7</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M56.6225,-288.1761C76.3402,-311.8752 110.6326,-353.092 130.3593,-376.802\"/>\n</g>\n<!-- 2&#45;&gt;8 -->\n<g id=\"edge14\" class=\"edge\">\n<title>2&#45;&gt;8</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M63.3018,-278.8046C80.9324,-285.9246 105.6506,-295.907 123.3687,-303.0624\"/>\n</g>\n<!-- 2&#45;&gt;9 -->\n<g id=\"edge18\" class=\"edge\">\n<title>2&#45;&gt;9</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M63.5557,-261.305C81.2049,-254.3471 105.8353,-244.637 123.4761,-237.6825\"/>\n</g>\n<!-- 3 -->\n<g id=\"node3\" class=\"node\">\n<title>3</title>\n<ellipse fill=\"#ff006d\" stroke=\"#ff006d\" cx=\"41.5\" cy=\"-187\" rx=\"23.5\" ry=\"23.5\"/>\n<text text-anchor=\"middle\" x=\"41.5\" y=\"-183.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#ff006d\">3</text>\n</g>\n<!-- 3&#45;&gt;5 -->\n<g id=\"edge3\" class=\"edge\">\n<title>3&#45;&gt;5</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M63.5557,-178.305C81.2049,-171.3471 105.8353,-161.637 123.4761,-154.6825\"/>\n</g>\n<!-- 3&#45;&gt;6 -->\n<g id=\"edge7\" class=\"edge\">\n<title>3&#45;&gt;6</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M56.6225,-168.9693C76.3402,-145.4598 110.6326,-104.5727 130.3593,-81.0524\"/>\n</g>\n<!-- 3&#45;&gt;7 -->\n<g id=\"edge11\" class=\"edge\">\n<title>3&#45;&gt;7</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M52.0444,-208.0888C71.9775,-247.9551 114.973,-333.9461 134.9277,-373.8554\"/>\n</g>\n<!-- 3&#45;&gt;8 -->\n<g id=\"edge15\" class=\"edge\">\n<title>3&#45;&gt;8</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M56.6225,-205.1761C76.3402,-228.8752 110.6326,-270.092 130.3593,-293.802\"/>\n</g>\n<!-- 3&#45;&gt;9 -->\n<g id=\"edge19\" class=\"edge\">\n<title>3&#45;&gt;9</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M63.3018,-195.8046C80.9324,-202.9246 105.6506,-212.907 123.3687,-220.0624\"/>\n</g>\n<!-- 4 -->\n<g id=\"node4\" class=\"node\">\n<title>4</title>\n<ellipse fill=\"#ff006d\" stroke=\"#ff006d\" cx=\"41.5\" cy=\"-104\" rx=\"23.5\" ry=\"23.5\"/>\n<text text-anchor=\"middle\" x=\"41.5\" y=\"-100.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#ff006d\">4</text>\n</g>\n<!-- 4&#45;&gt;5 -->\n<g id=\"edge4\" class=\"edge\">\n<title>4&#45;&gt;5</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M63.3018,-112.8046C80.9324,-119.9246 105.6506,-129.907 123.3687,-137.0624\"/>\n</g>\n<!-- 4&#45;&gt;6 -->\n<g id=\"edge8\" class=\"edge\">\n<title>4&#45;&gt;6</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M63.5557,-95.305C81.2049,-88.3471 105.8353,-78.637 123.4761,-71.6825\"/>\n</g>\n<!-- 4&#45;&gt;7 -->\n<g id=\"edge12\" class=\"edge\">\n<title>4&#45;&gt;7</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M49.488,-126.3511C68.8467,-180.5181 118.0981,-318.3275 137.4848,-372.5728\"/>\n</g>\n<!-- 4&#45;&gt;8 -->\n<g id=\"edge16\" class=\"edge\">\n<title>4&#45;&gt;8</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M52.0444,-125.0888C71.9775,-164.9551 114.973,-250.9461 134.9277,-290.8554\"/>\n</g>\n<!-- 4&#45;&gt;9 -->\n<g id=\"edge20\" class=\"edge\">\n<title>4&#45;&gt;9</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M56.6225,-122.1761C76.3402,-145.8752 110.6326,-187.092 130.3593,-210.802\"/>\n</g>\n<!-- 10 -->\n<g id=\"node10\" class=\"node\">\n<title>10</title>\n<ellipse fill=\"#01befe\" stroke=\"#01befe\" cx=\"260.5\" cy=\"-146\" rx=\"23.5\" ry=\"23.5\"/>\n<text text-anchor=\"middle\" x=\"260.5\" y=\"-142.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#01befe\">10</text>\n</g>\n<!-- 5&#45;&gt;10 -->\n<g id=\"edge21\" class=\"edge\">\n<title>5&#45;&gt;10</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M169.0495,-146C188.8946,-146 217.1458,-146 236.982,-146\"/>\n</g>\n<!-- 11 -->\n<g id=\"node11\" class=\"node\">\n<title>11</title>\n<ellipse fill=\"#01befe\" stroke=\"#01befe\" cx=\"260.5\" cy=\"-312\" rx=\"23.5\" ry=\"23.5\"/>\n<text text-anchor=\"middle\" x=\"260.5\" y=\"-308.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#01befe\">11</text>\n</g>\n<!-- 5&#45;&gt;11 -->\n<g id=\"edge26\" class=\"edge\">\n<title>5&#45;&gt;11</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M158.917,-165.3672C181.0171,-197.2681 224.8303,-260.5116 246.9907,-292.4996\"/>\n</g>\n<!-- 12 -->\n<g id=\"node12\" class=\"node\">\n<title>12</title>\n<ellipse fill=\"#01befe\" stroke=\"#01befe\" cx=\"260.5\" cy=\"-229\" rx=\"23.5\" ry=\"23.5\"/>\n<text text-anchor=\"middle\" x=\"260.5\" y=\"-225.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#01befe\">12</text>\n</g>\n<!-- 5&#45;&gt;12 -->\n<g id=\"edge31\" class=\"edge\">\n<title>5&#45;&gt;12</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M164.7484,-159.8923C185.9768,-175.2137 219.9354,-199.7229 241.1888,-215.0623\"/>\n</g>\n<!-- 6&#45;&gt;10 -->\n<g id=\"edge22\" class=\"edge\">\n<title>6&#45;&gt;10</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M164.7484,-76.8923C185.9768,-92.2137 219.9354,-116.7229 241.1888,-132.0623\"/>\n</g>\n<!-- 6&#45;&gt;11 -->\n<g id=\"edge27\" class=\"edge\">\n<title>6&#45;&gt;11</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M155.5043,-84.6615C177.3081,-131.8715 228.8929,-243.5638 250.6007,-290.5659\"/>\n</g>\n<!-- 6&#45;&gt;12 -->\n<g id=\"edge32\" class=\"edge\">\n<title>6&#45;&gt;12</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M158.917,-82.3672C181.0171,-114.2681 224.8303,-177.5116 246.9907,-209.4996\"/>\n</g>\n<!-- 7&#45;&gt;10 -->\n<g id=\"edge23\" class=\"edge\">\n<title>7&#45;&gt;10</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M155.5043,-373.3385C177.3081,-326.1285 228.8929,-214.4362 250.6007,-167.4341\"/>\n</g>\n<!-- 7&#45;&gt;11 -->\n<g id=\"edge28\" class=\"edge\">\n<title>7&#45;&gt;11</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M164.7484,-381.1077C185.9768,-365.7863 219.9354,-341.2771 241.1888,-325.9377\"/>\n</g>\n<!-- 7&#45;&gt;12 -->\n<g id=\"edge33\" class=\"edge\">\n<title>7&#45;&gt;12</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M158.917,-375.6328C181.0171,-343.7319 224.8303,-280.4884 246.9907,-248.5004\"/>\n</g>\n<!-- 8&#45;&gt;10 -->\n<g id=\"edge24\" class=\"edge\">\n<title>8&#45;&gt;10</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M158.917,-292.6328C181.0171,-260.7319 224.8303,-197.4884 246.9907,-165.5004\"/>\n</g>\n<!-- 8&#45;&gt;11 -->\n<g id=\"edge29\" class=\"edge\">\n<title>8&#45;&gt;11</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M169.0495,-312C188.8946,-312 217.1458,-312 236.982,-312\"/>\n</g>\n<!-- 8&#45;&gt;12 -->\n<g id=\"edge34\" class=\"edge\">\n<title>8&#45;&gt;12</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M164.7484,-298.1077C185.9768,-282.7863 219.9354,-258.2771 241.1888,-242.9377\"/>\n</g>\n<!-- 9&#45;&gt;10 -->\n<g id=\"edge25\" class=\"edge\">\n<title>9&#45;&gt;10</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M164.7484,-215.1077C185.9768,-199.7863 219.9354,-175.2771 241.1888,-159.9377\"/>\n</g>\n<!-- 9&#45;&gt;11 -->\n<g id=\"edge30\" class=\"edge\">\n<title>9&#45;&gt;11</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M164.7484,-242.8923C185.9768,-258.2137 219.9354,-282.7229 241.1888,-298.0623\"/>\n</g>\n<!-- 9&#45;&gt;12 -->\n<g id=\"edge35\" class=\"edge\">\n<title>9&#45;&gt;12</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M169.0495,-229C188.8946,-229 217.1458,-229 236.982,-229\"/>\n</g>\n<!-- 13 -->\n<g id=\"node13\" class=\"node\">\n<title>13</title>\n<ellipse fill=\"#93d30c\" stroke=\"#93d30c\" cx=\"368.5\" cy=\"-229\" rx=\"23.5\" ry=\"23.5\"/>\n<text text-anchor=\"middle\" x=\"368.5\" y=\"-225.3\" font-family=\"Times,serif\" font-size=\"14.00\" fill=\"#93d30c\">13</text>\n</g>\n<!-- 10&#45;&gt;13 -->\n<g id=\"edge36\" class=\"edge\">\n<title>10&#45;&gt;13</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M279.3122,-160.4575C299.014,-175.5987 329.7845,-199.2464 349.541,-214.4297\"/>\n</g>\n<!-- 11&#45;&gt;13 -->\n<g id=\"edge37\" class=\"edge\">\n<title>11&#45;&gt;13</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M279.3122,-297.5425C299.014,-282.4013 329.7845,-258.7536 349.541,-243.5703\"/>\n</g>\n<!-- 12&#45;&gt;13 -->\n<g id=\"edge38\" class=\"edge\">\n<title>12&#45;&gt;13</title>\n<path fill=\"none\" stroke=\"#707070\" stroke-width=\"2\" d=\"M284.2011,-229C302.208,-229 326.8609,-229 344.8542,-229\"/>\n</g>\n</g>\n</svg>\n"
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 16
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "MJpO95ILXasL",
        "colab_type": "text"
      },
      "source": [
        "We start by creating the layers of our model in the constructor. The `forward()` method is where the magic happens. It accepts the input `x` and allows it to flow through each layer.\n",
        "\n",
        "There is a corresponding backward pass (defined for you by PyTorch) that allows the model to learn from the errors that is currently making.\n",
        "\n",
        "### Activation Functions\n",
        "\n",
        "You might notice the calls to `F.relu` and `torch.sigmoid`. Why do we need those?\n",
        "\n",
        "One of the cool *features* of Neural Networks is that they can approximate non-linear functions. In fact, [it is proven that they can approximate any function](https://en.wikipedia.org/wiki/Universal_approximation_theorem).\n",
        "\n",
        "Good luck approximating non-linear functions by stacking linear layers. Activation functions allow you to break from the linear world and learn (hopefully) more. You'll usually find them applied to an output of some layer. \n",
        "\n",
        "Those functions must be hard to define, right?\n",
        "\n",
        "#### ReLU\n",
        "\n",
        "Not at all, let start with the ReLU definition (one of the most widely used activation function):\n",
        "\n",
        "$$\n",
        "\\text{ReLU}(x) = \\max({0, x})\n",
        "$$\n",
        "\n",
        "Easy peasy, the result is the maximum value of zero and the input."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "X8dFMwTrhmKv",
        "colab_type": "code",
        "outputId": "bbe157d8-2d6f-4455-cca7-2d1e6e211fc8",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 493
        }
      },
      "source": [
        "ax = plt.gca()\n",
        "\n",
        "plt.plot(\n",
        "  np.linspace(-1, 1, 5), \n",
        "  F.relu(torch.linspace(-1, 1, steps=5)).numpy()\n",
        ")\n",
        "ax.set_ylim([-1.5, 1.5]);"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAA\nABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAA\nAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAA\nAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMA\nAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUA\nAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1\nAAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxY\nDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQn\nVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADF\nidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABA\ncWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAA\nUJxYDQAAAABAcUNK38DmePzxx/OjH/0oTzzxRJYtW5a2trYccsghmTFjRqZPn75Ne8+YMSP/9E//\n9K7rLr744px99tnbdC0AAAAAAN5ewz9Z/d3vfjczZszIvffem66urvT29qarqyv33ntvPvOZz+R7\n3/te6VsEAAAAAGAbNfST1b/4xS9yzTXXJEkOPfTQfPnLX86+++6bl19+Od/61rfy+OOP51vf+lYm\nT56cE088cZuu9bGPfSxf//rX33He2tq6TfsDAAAAAPDOGjZW9/T05Jvf/GaSZP/998/s2bM3BOO2\ntrbMnj07p5xySl566aVcddVVOf7447cpKA8ZMiSjRo0akHsHAAAAAGDLNOxrQB544IG88sorSZIv\n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\nGvWBt4wLhw4dsn87HhYW5rVxono82W7vvfeefcOp/v37a8GCBS69up7xy7NsfSc1NVU//fSTwzKl\n50PV7Tu2+iXpyy+/dFgmKSlJaWlpFdbv7hjhPp5qu/j4ePsViWPGjNEf/vCHGtVTEcYl7+QNY8PW\nrVvta8I66hveECNqxtNtt3XrVmVnZ0uqemPF6mD8ujYx/6oZktXwWk2aNNF9990nSfrXv/5l/+Mt\nbfHixSosLJTFYtFvf/vbcsejo6PVokULe9mrF7UvKCjQkiVLJF3ZwbdPnz4u/legJsxot9K3ejk7\nKcnIyKj0+LFjx/TGG29IurJuVO/evWseIFzGE/2rsm/NJSk3N1ezZs2y/z506FBT4oTreardVq5c\nqVdeeUWS1LNnT7366qvy83N+dTfGL+/z0EMP2TfRWbRokQzDKHM8JydHS5culSTdfvvt1f6gGxER\noU6dOkmSli5dar8C0cYwDC1atEjSlc18HN327O4Y4T6eaLu//e1v+uSTTyRdmUuVfp9zRlXj0vff\nf2+vv23btvb+DPO5u39V1TcyMzP1pz/9SZLk7+/vcJN0xq+6y9NtZ/tc6O/v7/Rm1YxfqAjzr5rx\nfemll14yOwjUTWlpaUpOTlZGRoYyMjK0f/9++1XOERERKikpsR+TVG6zuu+//179+vWzfxh2tMNu\nhw4dtGrVKuXl5Wnjxo1q1aqVrr/+ep0+fVqvvfaaVq5cKUkaNWqUhg8fXu71vr6+atasmdavX2+/\nCrtt27YKDAzUTz/9pBkzZtiXGImPj9dtt93muv8g1Jgr2s2Z/mVTXFysmTNnKi8vTx06dNCUKVOc\ninPs2LHasGGD8vPzZbFY5Ovrq4KCAiUnJ2vlypV6/vnn7euRzZkzR507d67ufwXcwBP9a/HixVq4\ncKFyc3MlXVlHsbi4WBkZGVq/fr2mT5+uo0ePSrrygf7RRx91S5zwPE/0r3Xr1un555+XYRgKDw/X\n66+/LovFosLCQoc/trhKY/zyPkFBQfL19dX27duVlpamI0eOKDQ0VL6+vtqzZ4/i4uKUnp4uPz8/\nLVq0SC1btizz+lWrVunBBx/UG2+8oVatWqlDhw7lznHrrbdq9erVys3N1datW9WmTRs1btxYKSkp\nio+P16ZNmyRJU6dOVa9evVweI8zj7v61bNky+xdx99xzj15++WUVFRVVOC5ZLJZyG5b1799f+/fv\nV0FBgXx9fWWxWHT58mUdPXpU77//vubPn6/CwkL5+fnplVdesW9SDPO5u38999xzWr58ufLy8uTj\n4yNfX18VFRUpPT1dq1ev1vTp0+0XCvzud7/TgAEDXB4jzOOJ90ebCxcuaM6cOSouLlZ0dLTDHIMj\njF9127Fjx5SWlmbPX+3atcu+ZF/37t118eJF+7GAgAAFBQXZX8v8yz3YYBE19uabbyohIcHhsfj4\n+DK/T5kyRU899VS1z9GmTRstWbJEU6dO1enTpx0mEaOjo/XCCy9UWMcDDzygtLQ0vfbaa/rf//5X\nboMXi8WiadOm6YEHHqh2fHAfT7bbd999p7Nnz0qq3q1eJSUl2rZtm7Zt21ZhmcDAQM2cOdPpiQ48\nwxP968iRI/ZvySsSExNT6RrDjF91k7vbbcWKFSopKZEkHTx4sMo19h29BzN+eacJEyboxIkT+vTT\nT/X111/r66+/LnPc399f8+fPV7du3WpUf7du3TR//nzNnj1bR44c0fjx48uVGTVqVKVrDLs7RriP\nO9vun//8p/3x1q1bFRkZWWn5BQsW6OGHHy7zXFFRkcO4SgsODtbLL7/ssr1F4Dru7F+GYWjv3r3a\nu3dvhWV8fX01ceJEPf3006bECPfyVNutW7fOfldcdT4XMn7VbXPnztWuXbscHrs6B+Xo/asqzL+q\nj2Q1vF6vXr20evVqffDBB9q6dasyMzMVFBSk9u3b6+GHH3bqTWTSpEmKjIzU8uXLtWfPHmVnZ+uG\nG25Q165dNXbs2Con1DCHp9rNdquXn5+fBg8e7PTrZsyYoe3bt2vfvn06deqUsrOzlZ+fr+uuu06h\noaG68847FRMTo+bNm7skTriWO/tXTEyMmjZtqr179yo5OVk5OTnKzc1VUFCQWrZsqW7dumn48OHq\n2LGjqXHCfby93Ri/vNfcuXPVp08frVixQgcPHtSFCxd04403qkePHho3bpzat29fq/ofeughhYWF\n6cMPP9TOnTt19uxZBQcHKzw8XLGxsWXWVjQrRriPN7fdggULtHv3bu3fv1+ZmZnKyclRYWGhgoOD\n1a5dO/Xq1UsjRowot6E6vIe7+tfEiRPVoUMH7du3T2lpacrJyVFeXp4aNWqkW265RXfccYdGjhyp\n3/zmN6bFCPfzRNvZPhdWdwk0xi9UhflX9fgYVy92AgAAAAAAAACAh7HBIgAAAAAAAADAdCSrAQAA\nAAAAAACmI1kNAAAAAAAAADAdyWoAAAAAAAAAgOlIVgMAAAAAAAAATEeyGgAAAAAAAABgOpLVAAAA\nAAAAAADTkawGAAAAAAAAAJiOZDUAAAAAAAAAwHQkqwEAAAAAAAAApiNZDQAAAAAAAAAwHclqAAAA\nAAAAAIDpSFYDAAAAAAAAAExHshoAAAAAAAAAYDqS1QAAAAAAAAAA05GsBgAAAAAAAACYjmQ1AAAA\nAAAAAMB0JKsBAAAAAAAAAKYjWQ0AAAAAAAAAMN3/A0OAhdYv04ooAAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 864x576 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "image/png": {
              "width": 725,
              "height": 476
            }
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ngpYTzfUCQF2",
        "colab_type": "text"
      },
      "source": [
        "#### Sigmoid\n",
        "\n",
        "The sigmoid is useful when you need to make a binary decision/classification (answering with a *yes* or a *no*). \n",
        "\n",
        "It is defined as:\n",
        "\n",
        "$$\\text{Sigmoid}(x) = \\frac{1}{1+e^{-x}}$$\n",
        "\n",
        "The sigmoid squishes the input values between 0 and 1. But in a super kind of way:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "35giPZUfAgV6",
        "colab_type": "code",
        "outputId": "618568ab-f71a-4936-9eec-532c564040e4",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 493
        }
      },
      "source": [
        "ax = plt.gca()\n",
        "\n",
        "plt.plot(\n",
        "  np.linspace(-10, 10, 100), \n",
        "  torch.sigmoid(torch.linspace(-10, 10, steps=100)).numpy()\n",
        ")\n",
        "ax.set_ylim([-1.5, 1.5]);"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nb2/PDTfckJe//OVJkptuuilPPfVUv343AAAAAABVDR2rR48enXPPPTdHHXVUXT7/wQcfzIIFC5Ik\n73rXuzJ+/PjdzlcqlXzoQx9KkmzZsiXf+MY36rIOAAAAAIChrqFjdb396Ec/2nl8/vnn7/Wa9vb2\nTJs2LUnywx/+8LCsCwAAAABgqBnSsfrhhx9OkkyaNCmTJ0/e53Vz5szZ7XoAAAAAAPrXkI7Vjz32\nWJJk6tSp+71uypQpSZLNmzeno6Oj7usCAAAAABhqWspeQJmefvrpJMmRRx653+t2Pb9+/fpMmjSp\nrusCAAAASJLeokhPkepfkt5djnuKvnHffO9zzO04LnY5t7fXvZ0v9nJuz7kiffO7nC/65ne9Zq/j\nfR3v77q+/xvtObe3cXa9fo/3rt52XJLk6CXFbvPPuvYgz+31dY/zex4/69yeJ/d2zT6u39/n7nVc\nPMf551jH/j7rOa8/yPl92df37vc9db7+mS3T8+KWDXlRUaRSqRzku4eeIR2rt27dmiQZPnz4fq8b\nMWLEzuMtW7bUbT2bNm3KvffeW7fPbzRD6d9KOdxj1JP7i3pyf1FP7i/qyf1FPe3v/iqKpDuVdKWS\n7UUlXWlKdyrpLirp3u24769o2nm8vahke/r+dj3ue8+O455dzvek0heLdx1Xsr3IbuOeYpdrU0nv\nLu+rjrPLtek7X72m6DvmcOh7KHFFuatgsBqXu7aPy6k/eyTtzfXrioPFkI7VAAAAQP/rLZKtacrW\noilb01x9LZrSmaZsK5rSmUrfa9PO186iKdtS6XutjrtSSVffa2dfYO5MU7r6gvTO16G9yynQ4FrT\nm0mVrrKXMSAM6Vg9cuTIdHd3p6tr/zfLtm3bdh6PGjWqbusZPXp0ZsyYUbfPbxQ7/tvw008/veSV\nMFi5x6gn9xf15P6intxf1JP7a+AriiJbe5MN25MNPft43eV4Y0+yaZe/zXu8bu0t+180uDRXkuYd\nr5XqD5Dt67hpj/k95yo75nc5t+trZY+5XceVPed3mavsMr/b8S5z+7xmL9cdzDgH+J70zWWPuSdW\nrUolRY6bMuVZn5ldPmfPuT0/Z2/n9vq6x/k9j591rrKP+YO8/oDGlec4n2fb1/P/+9rxYp/XH+T8\nvhzKThsH/R0Hce3SX/4yc5o35VVnvvAgv2XgWrx4cTZt2nRI7x3SsXr8+PHZsGFD1q1bt9/rdj0/\n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\n+isZzXr/bfj8+fMLXwlHIvcX1eT+oprcX1ST+4tqc49RTaPx/lqxYkXa2tqG9d2ajdVTpkzp216/\nfv0+x/YeP/roo4d8js2bNx/w/MM5B7urq0tOHrMt848S/6iOSXVdSZKjGtxjAAAAAIeL+v0PKePY\nY4/te4r5pZde2ufYjFbyTwAAIABJREFUNWvWJElOOumkIZ2jd/yBzj9x4kQ/rggAAAAAUAU1G6vr\n6uoyb968JMnSpUv3Ou6VV15Ja2trkvSNP1C941tbW/vm2JOnn356WPMDAAAAAHBgajZWJ8l5552X\nJFm1alWeffbZPY558MEH+7bPP//8Yc2fJA888MAexzzzzDNZvXr1sOYHAAAAAODA1HSsfu9739u3\nFMitt96aSqUy6PimTZtyxx13JElOP/30IT/5fOqpp+a0005Lktxxxx3ZtGnToOOVSiW33nprku4f\nVrzooouG9XcAAAAAALBvNR2rm5ubc+211yZJfvjDH+a6667Ls88+mw0bNuSJJ57IokWLsm7dujQ0\nNORTn/rUbt+/77770tLSkpaWltx33317PMcf/dEfpaGhIevWrcuiRYvyxBNPZMOGDXn22Wdz3XXX\n5fHHH0+SXHvttWlubq7eHwsAAAAAMIo1lL6A/bnmmmuyZs2a3H333fnBD36QH/zgB4OOjx07Njfd\ndFPmz58/rPnnz5+fm266KTfeeGOee+65XH311buNueKKK3LNNdcMa34AAAAAAPav5mN1knzmM5/J\nwoUL861vfSvLly/P66+/nmOOOSZnn312PvCBD6SlpeWg5n/ve9+buXPn5hvf+Eb+7d/+LevWrcub\n3vSmzJs3L1deeeWgta0BAAAAABh5h0WsTrp/DHGo0fiSSy7JJZdcckBjW1pa8rnPfW44lwYAAAAA\nwEGq6TWrAQAAAAAYHcRqAAAAAACKE6sBAAAAAChOrAYAAAAAoDixGgAAAACA4sRqAAAAAACKE6sB\nAAAAAChOrAYAAAAAoDixGgAAAACA4sRqAAAAAACKE6sBAAAAAChOrAYAAAAAoDixGgAAAACA4sRq\nAAAAAACKE6sBAAAAAChOrAYAAAAAoDixGgAAAACA4sRqAAAAAACKE6sBAAAAAChOrAYAAAAAoDix\nGgAAAACA4sRqAAAAAACKE6sBAAAAAChOrAYAAAAAoDixGgAAAACA4sRqAAAAAACKE6sBAAAAAChO\n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\nDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQn\nVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADF\nidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABA\ncWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAA\nUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAA\nABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAA\nAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAA\nAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMA\nAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUA\nAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1AAAAAADFidUAAAAAABQnVgMAAAAAUJxYDQAAAABAcWI1\nAAAAAADFNZS+gH156aWXsnTp0r7XM888k23btiVJvvnNb2bBggUjdq41a9bkG9/4Rh599NG0trZm\nwoQJOeWUU3LppZfmoosuGrHzAAAAAACwu5qO1RdccMEhOc/jjz+ej370o2lra+vbt3379jz55JN5\n8skn8+CDD+a2227L2LFjD8n1AAAAAACMNofFMiDNzc0599xzc+6554743KtWrcp1112Xtra2TJ8+\nPV/5ylfyox/9KN///vdz2WWXJUkeeuih/OVf/uWInxsAAAAAgG41/WT1l770pZx66qmZOXNmkuS+\n++7Lo48+OqLn+OIXv5j29vY0NTXlrrvuyuzZs5MkU6dOzWc/+9lUKpXce++9ueeee/L+978/c+bM\nGdHzAwAAAABQ409Wv/Od7+wL1dWwfv36/Mu//EuS5H3ve19fqB7oYx/7WBoaGtLV1ZV77rmnatcC\nAAAAADCa1XSsrrZHHnkkXV1dSZLf/u3f3uOYadOm5ayzzkrSvRwIAAAAAAAjb1TH6uXLlydJxowZ\nk9NOO22v404//fQkyS9/+cts2rTpkFwbAAAAAMBoMqpj9cqVK5Mkxx57bBobG/c6buBSJL/4xS+q\nfl0AAAAAAKPNqI7VGzduTJI0Nzfvc9zUqVP7tj1ZDQAAAAAw8hpKX0BJW7duTZKMGzdun+Oampr6\ntrds2VK162lra8vixYurNn+tGU1/K2W4x6gm9xfV5P6imtxfVJP7i2pyf1Ft7jGqyf11YEYkVm/d\nujVr1649qDlmzJiR8ePHj8TlAAAAAABwmBmRWL106dJcddVVBzXHnXfembe//e0jcTkHrDeOb9++\nfZ/jtm3b1rc9YcKEql3PpEmT0tLSUrX5a0Xvv0maP39+4SvhSOUeo5rcX1ST+4tqcn9RTe4vqsn9\nRbW5x6im0Xh/rVixIm1tbcP67qhes3rKlClJkg0bNuxz3Pr16/u2jz766KpeEwAAAADAaDQiT1Yv\nWLAgK1asGImpDqmTTjopP/rRj/Lqq6+mo6MjjY2Nexy3Zs2aQd8BAAAAAGBkjeonq+fNm5ck2blz\nZ5YtW7bXcU8//XSS5M1vfnPf09gAAAAAAIycUR2rFy5cmPr67n8EDz744B7HrF+/Pk899VSS5Pzz\nzz9k1wYAAAAAMJqM6lg9derUvOMd70iS3HvvvVm9evVuY7785S+ns7Mz9fX1ufzyyw/1JQIAAAAA\njAojsmZ1taxevXrQjx8OjMkvvPBCxo0b1/d5+vTpmT59+qDvP/nkk7nqqquSJB/+8IfzkY98ZLdz\nfPzjH89jjz2W9vb2XHXVVbnhhhtyxhlnZNOmTbnrrrtyzz33JEkuv/zyzJkzZ0T/PgAAAAAAutV0\nrL799ttz//337/HYX/zFXwz6vLcYvT8nnnhibrvttnz0ox/Nyy+/nA9/+MO7jTn//PNzww03DHlu\nAAAAAAAOTE3H6kPlnHPOyXe+853ceeedeeyxx9La2prx48enpaUll1xySS6++OLSlwgAAAAAcESr\n6Vh988035+abbx729xcsWJAVK1Yc0NiZM2fmxhtvHPa5AAAAAAAYvlH9A4sAAAAAANQGsRoAAAAA\ngOLEagAAAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAAAAAAihOrAQAAAAAoTqwGAAAA\nAKA4sRoAAAAAgOLEagAAAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAAAAAAihOrAQAA\nAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAAAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAA\nAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAAAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoA\nAAAAgOLEagAAAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAAAAAAihOrAQAAAAAoTqwG\nAAAAAKA4sRoAAAAAgOLEagAAAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAAAAAAihOr\nAQAAAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAAAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoAAAAAgOLE\nagAAAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAAAAAAihOrAQAAAAAoTqwGAAAAAKA4\nsRoAAAAAgOLEagAAAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAAAAAAihOrAQAAAAAo\nTqwGAAAAAKA4sRoAAAAAgOLEagAAAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAAAAAA\nihOrAQAAAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAAAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoAAAAA\ngOLEagAAAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAAAAAAihOrAQAAAAAoTqwGAAAA\nAKA4sRoAAAAAgOLEagAAAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAAAAAAihOrAQAA\nAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAAAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAA\nAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAAAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoA\nAAAAgOLEagAAAAAAihOrAQAAAAAoTqwGAAAAAKA4sRoAAAAAgOLEagAAAAAAihOrAQAAAAAoTqwG\nAID/v707D4u63P8//mIHpQMiKiJuHaPUKFNcszSlxUpNTY5WmmuePCpeWWbZ5paVxxQztTQ1Pcc0\nC1Nb1HK33Dc6aqKFiAsoCiqiDtvvD37z+YLsw8AM8HxcV9c1zOcz9/ueBt/cn/fcn/sGAAAAYHMU\nqwEAAAAAAAAANkexGgAAAAAAAABgcxSrAQAAAAAAAAA2R7EaAAAAAAAAAGBzFKsBAAAAAAAAADZH\nsRoAAAAAAAAAYHMUqwEAAAAAAAAANkexGgAAAAAAAABgcxSrAQAAAAAAAAA2R7EaAAAAAAAAAGBz\nFKsBAAAAAAAAADbnbOsOFCQ2NlaRkZHGf0ePHtXNmzclSUuWLFHr1q1LHKNfv37as2dPoeeNHTtW\ngwcPLnE8AAAAAAAAAEBudl2sDgkJsXUXAAAAAAAAAABlwK6L1WY+Pj4KCgqSJG3durVUYnTt2lUT\nJkzI97irq2upxAUAAAAAAAAA2HmxeubMmQoKClJAQIAkKSIiotSK1c7OzqpatWqptA0AAAAAAAAA\nKJhdF6u7dOli6y4AAAAAAAAAAMqAo607AAAAAAAAAAAAxerbpKWlKSMjw9bdAAAAAAAAAIBKxa6X\nASlLO3bsUIcOHRQfHy8HBwf5+vqqefPm6tOnj9q2bWvr7gEAAAAAAABAhcbM6v/v4sWLiouLU2Zm\npjIyMnThwgWtW7dOAwYM0JgxY2QymWzdRQAAAAAAAACosBwyMzMzbd2JooqIiNAbb7whSVqyZIla\nt25d4jbfeOMNBQQEqE2bNgoICJCPj48SExO1c+dOzZ07V9HR0ZKkbt26adq0aSWOl5fIyEilpqaW\nStsAAAAAAAAAUNZcXFx03333Fes1VlkG5MaNGzp37lyJ2vD395eHh4c1ulMsU6dOzfVczZo11b17\ndz366KMaNGiQDh48qDVr1ig0NFQtW7a0eh/S09Ot3iYAAAAAAAAA2IolNU+rFKsjIyPVv3//ErWx\naNEitWvXzhrdsZoqVapo8uTJeuqppyRJa9euLZVitZubm27duiUnJye5ublZvX0AAAAAAAAAKAu3\nbt1Senq6RXVONlgsRKNGjVS/fn3FxMTo6NGjpRKjSZMmpdIuAAAAAAAAAJQXVilWt27dWsePH7dG\nU3bJx8dHMTExunbtmq27AgAAAAAAAAAVkqOtO1AeJCQkSJLuuOMOG/cEAAAAAAAAAComitWF+OOP\nPxQbGyuJ5ToAAAAAAAAAoLRU6mJ1fHx8gceTk5P11ltvGT9369attLsEAAAAAAAAAJWSXW+wePr0\naV2+fDnHz2YnT57MsaOkn5+f/Pz8crx+9+7d6t+/vyRpxIgRGjlyZI7jCxYs0K5du9S1a1e1aNFC\ndevWlbu7uxITE7Vr1y7Nnz/fmFX9zDPPKDg42OrvEQAAAAAAAABg58XqOXPmaNWqVXkemzhxYo6f\n8ypGF0VUVJSmT59e4DmhoaF65513it02AAAAAAAAAKBo7LpYXdpCQ0Pl6+urgwcPKjo6WklJSUpO\nTpaHh4f8/f3VokUL9erVS/fee6+tuwoAAAAAAAAAFZpDZmZmpq07AQAAAAAAAACo3Cr1BosAAAAA\nAAAAAPtAsRoAAAAAAAAAYHMUqwEAAAAAAAAANkexGgAAAAAAAABgcxSrAQAAAAAAAAA2R7EaAAAA\nAAAAAGBzFKsBAAAAAAAAADZHsRoAAAAAAAAAYHPOtu4Ayq/Y2FhFRkYa/x09elQ3b96UJC1ZskSt\nW7cuclurV6/Wt99+q6ioKKWkpMjPz08PP/ywBg4cqDp16lilv/v27dN//vMfHThwQJcvX5aPj4+a\nN2+ufv36qUWLFlaJgbLRr18/7dmzp8jn9+jRQx988EGpxRk7dqwGDx5c7PZhv+6+++4inffNN98o\nKCioRLHOnDmjxYsXa+vWrYqPj1eVKlUUGBioXr16qXv37iVqG/YpLS1Nu3bt0o4dO3To0CFFR0cr\nOTlZVapUUYMGDfTwww+rb9++8vX1LVEccljFtXnzZi1fvlxHjhzRlStX5Ovrq7Zt2+rFF18scv4q\nyPHjx/Xll19q586dSkhIkJeXl5o2bao+ffrokUcescI7gL25deuWtm/frh07digyMlKxsbFKSUmR\np6en7rrrLnXq1EmhoaHy9PS0OEanTp109uzZQs8LDw/XE088YXEc2J8zZ86oc+fORTp3586d8vHx\nsTgW+avyKWpuMRsxYoRGjhxZKjHIX+VPZmam/vrrrxy1rePHjys1NVWStHHjRgUEBBTaTlpampYv\nX661a9cqOjpaJpNJ/v7+CgkJ0YABA0qU17Ir7TGgvaBYDYuFhISUuI3U1FSNHDlSmzdvzvF8TEyM\nli5dqlWrVik8PFzt27cvUZx58+YpPDxcGRkZxnPx8fH66aeftH79eo0ePVrDhg0rUQzYr8DAQFt3\nAcjTjh07FBYWpuTkZOO5W7duaffu3dq9e7fWrVunWbNmycXFxYa9hLX16NFDUVFRuZ6/evWqMUhe\nunSppk2bpg4dOtigh7Bn7777rpYvX57juXPnzunbb7/V2rVrNWnSJD3zzDMWt79q1Sq9/fbbxkWa\nJF28eFFbtmzRli1b1LdvX7333nsWtw/71LZtW12/fj3X80lJSdq7d6/27t2rL7/8Up988onuu+8+\nG/QQKBz5C0U6AvxVAAAY+klEQVTBtSGyO3v2rJ588skStXHt2jUNHjxYhw8fzvH8n3/+qT///FMR\nERGaP3++GjduXKI4pT0GtCcUq1FiPj4+xszCrVu3Fuu1U6ZMMQrVoaGhGjBggLy9vbV//35NmTJF\ncXFxCgsLU0REhOrXr29R/3788UfNmDFDkhQcHKxXXnlFDRs2VHR0tD7++GPt27dPH3/8serWrVvi\nJIWyMX/+fKWnpxd4zmuvvaaNGzfKyclJXbt2LVG8rl27asKECfked3V1LVH7sF8TJkwo8PfHw8PD\n4rZjYmI0atQoXb9+XX5+fho/frxatGihpKQkLV68WF9//bU2bdqkKVOmcGFVwVy/fl2Ojo5q3769\nnnjiCTVr1kzVq1dXUlKSfv75Z3366ae6cuWKRowYoRUrVqhJkyYlikcOqzjmz59vXKSEhIRo+PDh\nql27to4ePaoPP/xQUVFRGj9+vOrWrWvRXWP79+/XW2+9pbS0NAUGBur1119XkyZNdP78ec2ZM0e/\n/PKLvvrqK9WpU0dDhw619tuDDV2/fl0uLi4KCQlRSEiIgoKC5O3trQsXLmjNmjVauHCh4uLiNGTI\nEK1du1a1atWyONawYcMKnCTi7u5ucduwf59//rmCg4PzPV61alWL2iV/VV4//PBDjklpeXn++ed1\n7NgxeXl5lWiGPfmrYvPz81NQUJASExO1b9++Ir/ulVde0eHDh+Xg4KBhw4apV69ecnd3144dO/T+\n++/r4sWLGjZsmNasWSNvb2+L+lbaY0B7Q7EaFps5c6aCgoKMWyIiIiKKVayOiorSihUrJEm9e/fW\npEmTjGOPPfaYAgMD1b17dyUnJ2vmzJlGwbk4TCaTPvroI0lZ36AuWrTIuCj38fHRokWL1LNnT504\ncULTpk1TSEgIF+3lQGGDgKtXr2r79u2SpHbt2qlGjRoliufs7GzxwBnlm6ura6l99jNmzND169fl\n7u6uL7/8Ug0aNJAkVa9eXZMmTVJmZqZWrlypFStW6Pnnn9ddd91VKv1A2evSpYtCQ0NzfQnr7e2t\noUOH6oEHHlC/fv1kMpk0Y8YMzZ8/v0TxyGEVw+XLlzVnzhxJUvv27TV79mw5ODgYPzdt2lRPP/20\nEhIS9OGHH+rrr78udowPPvhAaWlp8vX11ZIlS1StWjVJWWOm2bNna/Dgwfr11181Z84c9erVy2q3\ntML2nnvuOQ0fPjzXmMnLy0tjxoxRYGCgXn31VV25ckVz584t0ZeoLi4u5KRKzN3dvVQ+f/JX5VXY\n5JE///xTx44dk5Q1BivJ9T75q+Lx9vbWp59+qvvvv9/4G/jJJ58UuVi9detWbdu2TZIUFhaml19+\n2TjWs2dP1atXTy+88ILi4+O1YMECvfrqq8XuY1mMAe0NGyzCYl26dCnS2j35Wb58uTIyMuTi4qLR\no0fnOt6gQQP17t1bkrR+/Xpdvny52DE2bdqk8+fPS5JGjhyZ6w+Tq6urRo0aJSnr9oktW7YUOwbs\nz48//iiTySQp63Z7wN5cunRJ69evl5T1ZZ25UJ3d6NGj5ezsrIyMDOOLPVQMr732WoF3CwUHBxvL\nf+zcuTPH7cyovFatWqWUlBRJWTN4zBcpZtWqVdOQIUMkSYcPH9aRI0eK1f7vv/+uyMhISdKQIUOM\nQo+Zg4ODxowZI0lKSUnR6tWrLXofsE/vvvtugV/ud+3a1bh13nxRDtgL8hcK8t133xmPuTbE7Tw9\nPRUSEmLxBLdly5ZJyhqH5bUHTHBwsDp27ChJWrlypdLS0oodo7THgPaIYjVsxrz8R3BwcL6bSJk3\nJ0hPT7eokGyO4e7ubiSI23Xs2NGYqbtp06Zix4D9MQ9AzX94AHuzZcsW43bF/DZh8fX1VcuWLSWR\nmyoj80z61NRUJSYm2rg3sAfmMU29evXUtGnTPM/p0qWL8bi4eSP7/iHZ28muadOmqlevnkXto/wz\n56ULFy7YuCdATuQv5CczM1Nr166VlDUZrlmzZjbuESqSmzdvaufOnZKkzp075ztr35yXkpKStH//\n/mLHKe0xoD2iWA2buHz5ss6dOydJuv/++/M9LygoSE5OTpJk0bdD5tc0adIk38Th6upqrAdaEb6B\nquxiY2N14MABSVlFQDc3N6u1nZaWVuh6aKiYzDP1rcWca5ycnArcqMqcH8+ePaukpCSr9gH2LSEh\nwXjs6elplTbJYeWbOW8UNG7y8/Mz1hIu7pjGfH6tWrXk5+eX73nm+IyZKh9zXrrjjjus0l5qaqoy\nMzOt0hbKH2uOrchfyM+uXbuMO627d+9utXbJX5CkEydO6NatW5JU4Bch2Y+VpK5VWmNAe8Sa1bCJ\n6Oho43HdunXzPc/NzU01atRQXFxcjtcURUZGhk6dOlVoDEkKCAjQgQMHdOrUKWVmZua6rQLlR/bb\nvKy1E+6OHTvUoUMHxcfHy8HBQb6+vmrevLn69Omjtm3bWiUG7NNnn32mDz74QFeuXJGLi4vq1Kmj\ndu3aqV+/frrzzjstbtecz2rWrFngunnZl1r666+/1Lx5c4tjovwwmUzG3UT33HOPqlSpUqL2yGHl\nX3x8vHH7Z1HGNPHx8cUeN5nPL0r7UtaGfPHx8SXaaA/lR0JCgjEZ4IEHHihRW6tWrdJXX32lS5cu\nycnJSX5+fmrVqpWef/55Y9N2VFyTJk3S2bNnlZKSIldXVzVo0EAPPfSQ+vfvX2ChuSDkL+THfMet\ng4ODVYrV5C9kl32sVdASuf7+/nJ0dFRGRkaxx2dlMQa0R8yshk1kv6W5evXqBZ5rPl7cWYXXr183\n1vksagyTyaTr168XKw7si3lAEhAQUOBO48Vx8eJFxcXFKTMzUxkZGbpw4YLWrVunAQMGaMyYMVaf\ndQv7cerUKV25ckVS1gyKU6dOadmyZeratasWL15scbvmHFjY5j7ZcxczqyuPzz//3NinoW/fviVu\njxxW/pXFuMkco6jtWxID5df06dONcXVJ89LZs2d16dIlSVlL/Z09e1arVq3Ss88+qw8//JDZihXc\niRMnjMKLyWRSVFSUvvjiC3Xp0kU//PCDRW2Sv5CXGzduGHvEtGzZUnXq1Clxm+QvZFfU8ZmLi4v+\n9re/SbJ8fFZYjOzHK0J+Y2Y1bOLGjRvG48KWaTAfL24R2TwIklTojr/Z+5CSkmK1W65Rtvbt26fY\n2FhJWbd5lXSGfEBAgNq0aaM2bdooICBAPj4+SkxM1M6dOzV37lxFR0fr+++/l6Ojo6ZNm2aNtwA7\n0axZM3Xr1k0PPPCA/Pz85OnpqXPnzumXX37RZ599pqtXr2rq1KmqWrWqsRFscZhzYGH5z7yevpQz\np6Hi2rNnj+bOnSspa33NXr16WdwWOaziyP7vv7TGTea8VNiYibxU+axZs0YRERGSpE6dOumhhx6y\nqJ3AwEC98MILCg4OVu3ateXl5aWLFy9q27Ztmjt3ruLj47Vw4UK5ubnlufk6yi9HR0e1b99eTz31\nlJo2baratWvLzc1NMTEx+uGHH7Rw4UKlpKTotddek5eXl9q3b1+s9slfyMuGDRuMz7mkd9ySv5AX\nS+paxc09ZTEGtEcUqyuBGzduGOtDW8rf318eHh5W6hEqk7L8/VuzZo3x2BpLgEydOjXXczVr1lT3\n7t316KOPatCgQTp48KDWrFmj0NBQYzM8lJ3S+v1asWJFrvMaNGigIUOGqHPnzurbt68SExM1bdo0\nPfHEE1ZbvxP2pyxzWGxsrMLCwpSWliZPT09Nnz5dLi4uFsclhwEoqcjISL399tuSpNq1a2vKlCkW\ntzVv3rxcz9WpU0d9+/bVY489pr59+yomJkbz589Xz549jc3wUP75+/vriy++yPV8YGCgAgMD1aFD\nBw0YMEC3bt3SpEmT9OOPPxr7FgGWMl8benh46PHHHy9RW+QvoGxRrK4EIiMj1b9//xK1sWjRIrVr\n185KPVKOi3bzgvT5MR+vWrVqsWJkX+OzsFucs/ehpGuDIqey+v0zmUz66aefJGWtpVjaA4QqVapo\n8uTJeuqppyRJa9eupdBjA7bIbw0bNtSoUaM0YcIEXblyRVu3btXTTz9drJjmHFhY/rt586bxmNxk\nG2X1O5aQkKDBgwfr8uXLcnNz05w5c9SwYcMSxS0IOax8yf7vv7TGTR4eHkpNTS10zEReqjz++usv\nvfTSS7p586a8vb21YMGCQpevslT16tU1fvx4vfTSS0pLS9NPP/2kYcOGlUos2J/mzZurX79+WrBg\ngU6dOqXIyMhirY1O/sLtLly4oJ07d0qSOnfuXKp3TpO/Ki9L6lrFzT1lMQa0R6xZDZuoVq2a8di8\n5lN+zMe9vb2LFaNq1arGjLSixnB1da0Q/7Aro40bN+rq1auSpB49epRJzEaNGql+/fqSpKNHj5ZJ\nTNiHzp07G48t+ezNOdC8LnF+sueu4uZAlB9Xr17V4MGDFRMTI2dnZ4WHh6t169alHpccVn6UxbjJ\nHKOo7VsSA+XHuXPnNGjQICUmJqpq1aqaP3++GjVqVKoxH3zwQeMWZnJS5dOpUyfjcXE/f/IXbrdm\nzRqlp6dLKptrQ/JX5VTU8VlqaqpRq7B0fFZYjOzHK0J+Y2Z1JdC6dWsdP37c1t3IIftsMfMaw3kx\nmUy6ePFirtcUhaOjoxo0aKATJ04UGEOSzpw5IynrNv+SrnOMnMrq98+8saKbm5u6dOlS6vHMfHx8\nFBMTo2vXrpVZTPwfW+W37DPLLPnsGzZsqN9++00XLlyQyWTKd41Fc24yvwZlr7R/x1JSUvTSSy/p\njz/+kKOjoz766CM98sgjpRbvduSw8qFmzZqqUqWKUlJSijymKW7OaNiwoWJiYorcftWqVVWrVq1i\nxUD5kJCQoIEDB+r8+fNyd3fXvHnzdN9995V6XGdnZ3l5eenChQvkpEoo+8Zhxf38yV+4nfnasGbN\nmla9Qzw/5K/KKftYK/t12+3OnTunjIyMXK8pirIYA9ojZlbDJnx8fOTv7y8p6xbr/ERGRhrfiDZt\n2rTYccyvOXr0qLGD+e1SU1ONbz8tiQHbu3z5srZv3y5JeuSRR4yddstCQkKCJLFmcSVj/twlyz57\nc65JT0/X77//nu95hw8flpS1Jl72b9VRMZhMJg0fPlwHDx6UJE2YMMFYlqOskMPKBwcHByNvFDRu\niouLU3x8vKTij2nM58fHxxtt5MWclxgzVUxXrlzRwIEDderUKbm4uGjWrFlq1apVmcROTU1VUlKS\nJHJSZVSSsRX5C9kdPXpUUVFRkqSuXbvK0bH0y17kr8rprrvuMmbUm/NLXg4dOmQ8Lm7+KYsxoD2i\nWA2bMc8c27t3b763M6xbt06S5OTkpI4dO1oc4+bNm9q6dWue52zZssVYvyz77WcoP77//nulpaVJ\nss7GikX1xx9/GN9uNmnSpMziwvZ+/vln47Elg4GOHTsaA2dznrvdpUuXtG/fPknkpoooLS1NYWFh\nxnqKY8eOVWhoaJn2gRxWvpjHNDExMTp27Fie52TPJ8XNG9ln9Jv3gLjd0aNHdfr0aYvah/27fv26\nhgwZoqioKONOjw4dOpRZ/G3bthlrDleEC20UT0nGVuQvZGeeVS2V3bUh+atycnd3V9u2bSVlLUua\n37r55vGZt7e3WrRoUew4pT0GtEcUq2Ezffr0kaOjo1JTUxUeHp7r+OnTp/XNN99Ikh5//HGLNnTp\n1KmTateuLUkKDw/PlTxMJpNmzZolKWuXaksK4rC97777TlLW7YMPPfSQVdosaFaGJCUnJ+utt94y\nfu7WrZtV4sL24uLiCjx+8uRJzZ49W1LWgMOSC/nq1asbu5KvXLnSuHjKLjw8XKmpqXJ0dNQ//vGP\nYseA/crMzNS4ceO0adMmSdLw4cM1ePBgq8Ygh1U8PXr0MDbZmT59ujIzM3McT0pK0oIFCyRJ999/\nf7EvloOCgoylHhYsWGDMEDPLzMzU9OnTJWVt9tO9e3eL3gfsk8lk0ssvv2zM2po4caKefPJJq7Vf\n2N/W+Ph4vf/++5IkFxeXMl3SDaWvsM9/9+7dWrZsmaSsZRmLu+wM+Qtm6enp+v777yVlFY0DAwNL\n3Cb5CwV57rnnJGXd7b1o0aJcx/fv368tW7ZIknr37i1n5+KvxlzaY0B75PTee++9Z+tOoHw6ffq0\noqOjFRcXp7i4OB0+fNiYBRgUFKSMjAzjmKRcO/BWr15dCQkJ+t///qcjR47o4sWLqlevnjIzM/Xr\nr7/qlVdeUWJiojw9PTVjxow8F4n/5JNP1L9/f82ePVutWrVSQEBAjuNOTk6qWbOm1q9fb8xSbNCg\ngdzc3HTs2DGNGzfOuAV/4sSJuueee0rjfxVK0cmTJzVz5kxJUmhoaJELh7t371bnzp2NouPtm5mF\nh4dr2rRpSk5OlpS1Dll6erri4uK0fv16jR07VidOnJCU9Y39iy++aK23BBvr16+ffv75Z926dUuO\njo5ycnKSyWRSdHS0VqxYoTfffNNYi+6dd95Rs2bNcrVR2O+XJDVu3FgRERFKSUnRL7/8ojp16sjb\n21vnz5/XzJkztWLFCklZX+z16tWrFN8xytqkSZOML2N79+6tsLAwpaam5vufk5NTrltYyWGVj4eH\nh5ycnPTbb7/p9OnTioqKUsOGDeXk5KQDBw5ozJgxio2NlbOzs6ZPn24st2YWERGhZ555RrNnz1ad\nOnXUuHHjXDH+/ve/a/Xq1UpOTta2bdtUv359eXp66tSpU5o4caI2b94sSQoLC1P79u3L5H2j9KWn\npyssLMxYUm3UqFHq3bt3gXnJxcUlxz4vhf1+vf7661q6dKlSUlLk4OAgJycnpaWlKTY2VqtXr9bY\nsWONL9lefvllPfbYY2X3PwClLiQkRIcPH5bJZDL+pt28eVMnTpzQwoULNXnyZKWmpsrZ2Vn//ve/\njc1/zchfKKrt27cbY+ihQ4fmOU6/HfkLJ0+e1OnTp4361Z49e4ylYlu1aqVr164Zx1xdXeXh4WG8\ntkGDBoqMjFRMTIx2796ttLQ01alTRyaTSRs2bNC4ceN08+ZN1apVS9OmTZO7u3uu+OPGjdO//vUv\nzZ49Wz169Mi1rGlJx4DlERsswmJz5szRqlWr8jw2ceLEHD+PGDFCI0eOzHXem2++qbi4OG3evFkr\nVqww/rCYeXp6Kjw8PNeApTiefPJJnT59WjNnztTevXvVt2/fHMcdHR01evRoq84eQdkxz6qWrH+b\nV1RUlDELIz+hoaF65513rBoXtpWRkaEdO3Zox44d+Z7j5uamN954o0RF5Pr162vWrFkKCwvT+fPn\nNWLEiFzndOrUSePHj7c4BuzTf//7X+PxypUrtXLlygLPX7JkSZ5feBSGHFbxDB06VGfOnNHy5cu1\nYcMGbdiwIcdxFxcXTZ482aJbTCWpRYsWmjx5st5++21FRUVp0KBBuc7p06ePhg4dalH7sE/nz5/X\nxo0bjZ9nzZpl3HmYn40bN+aaJFKQzMxMHTx40FijPy9OTk4aNmyYRo0aVeR2UT6kpaXlmbOy8/Ly\n0pQpU/Tggw9aFIP8Ben/rg2dnZ3VtWtXq7RJ/qr4JkyYoD179uR57PZrtKlTp6pnz545nps+fbqG\nDBmiw4cPa+7cuZo7d26O4zVq1NBnn32W5wTMoirtMaC9oVgNm3J1ddW8efP03Xff6dtvv1VUVJRu\n3LihWrVq6eGHH9bAgQOLNRDOzz//+U8FBwdr6dKlOnDggBITE1WtWjU1b95c/fr1U3BwsBXeDcpa\nRkaG1q5dK0kKDAy06pqroaGh8vX11cGDBxUdHa2kpCQlJyfLw8ND/v7+atGihXr16qV7773XajFh\nH8aNG6fffvtNhw4d0rlz55SYmKhbt27pjjvuUMOGDdW2bVuFhobKz8+vxLHat2+v1atXa9GiRdq2\nbZvi4+Pl4eGhu+++Wz179izTNdhRsZDDKq4JEyaoY8eO+uqrr3TkyBFduXJFNWrUUJs2bTRgwADd\nfffdJWq/R48eatKkiRYvXqxdu3bp4sWL8vLyUtOmTdW3b98ca8MCRTVs2DA1btxYhw4d0unTp5WU\nlKSUlBRVrVpV9erVU8uWLdW7d2/deeedtu4qSsHUqVO1b98+HT58WPHx8UpKSlJqaqq8vLzUqFEj\ntW/fXs8++2yJN5Mmf1VuycnJxhJrDz30kEXLiOaF/IXC/O1vf9OyZcu0fPlyrVmzRtHR0UpNTZW/\nv786d+6sgQMHWuX3sbTHgPbEIfP2xU4AAAAAAAAAAChjbLAIAAAAAAAAALA5itUAAAAAAAAAAJuj\nWA0AAAAAAAAAsDmK1QAAAAAAAAAAm6NYDQAAAAAAAACwOYrVAAAAAAAAAACbo1gNAAAAAAAAALA5\nitUAAAAAAAAAAJujWA0AAAAAAAAAsDmK1QAAAAAAAAAAm6NYDQAAAAAAAACwOYrVAAAAAAAAAACb\no1gNAAAAAAAAALA5itUAAAAAAAAAAJujWA0AAAAAAAAAsDmK1QAAAAAAAAAAm6NYDQAAAAAAAACw\nOYrVAAAAAAAAAACbo1gNAAAAAAAAALC5/wdDOIk1Ibs5lAAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 864x576 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "image/png": {
              "width": 725,
              "height": 476
            }
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Hj_KFvzl3SsA",
        "colab_type": "text"
      },
      "source": [
        "## Training\n",
        "\n",
        "With the model in place, we need to find parameters that predict will it rain tomorrow. First, we need something to tell us how good we're currently doing:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "MhL1DT_MQIIf",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "criterion = nn.BCELoss()"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "byOLim3xSElu",
        "colab_type": "text"
      },
      "source": [
        "The [BCELoss](https://pytorch.org/docs/stable/nn.html#bceloss) is a loss function that measures the difference between the two binary vectors. In our case, the predictions of our model and the real values. It expects the values to be outputed by the sigmoid function. The closer this value gets to 0, the better your model should be.\n",
        "\n",
        "But how do we find parameters that minimize the loss function?\n",
        "\n",
        "### Optimization\n",
        "\n",
        "Imagine that each parameter of our NN is a knob. The optimizer's job is to find the perfect positions for each knob so that the loss gets close to 0. \n",
        "\n",
        "Real-world models can contain millions or even billions of parameters. With so many knobs to turn, it would be nice to have an efficient optimizer that quickly finds solutions.\n",
        "\n",
        "Contrary to what you might believe, optimization in Deep Learning is just satisfying. In practice, you're content with good enough parameter values.\n",
        "\n",
        "While there are tons of optimizers you can choose from, [Adam](https://pytorch.org/docs/stable/optim.html#torch.optim.Adam) is a safe first choice. PyTorch has a well-debugged implementation you can use:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Q2rXijYXUEjJ",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "optimizer = optim.Adam(net.parameters(), lr=0.001)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "S5eNPERFXEC-",
        "colab_type": "text"
      },
      "source": [
        "Naturally, the optimizer requires the parameters. The second argument `lr` is *learning rate*. It is a tradeoff between how good parameters you're going to find and how fast you'll get there. Finding good values for this can be black magic and a lot of brute-force \"experimentation\".\n",
        "\n",
        "### Doing it on the GPU\n",
        "\n",
        "Doing massively parallel computations on GPUs is one of the enablers for modern Deep Learning. You'll need nVIDIA GPU for that.\n",
        "\n",
        "PyTorch makes it really easy to transfer all the computation to your GPU:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "OHX2pDdkuzvo",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "6fHaY9Owvb6s",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "X_train = X_train.to(device)\n",
        "y_train = y_train.to(device)\n",
        "\n",
        "X_test = X_test.to(device)\n",
        "y_test = y_test.to(device)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "32SucCs6vXCp",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "net = net.to(device)\n",
        "\n",
        "criterion = criterion.to(device)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "UbSU2TBkYfO2",
        "colab_type": "text"
      },
      "source": [
        "We start by checking whether or not a CUDA device is available. Then, we transfer all training and test data to that device. Finally, we move our model and loss function.\n",
        "\n",
        "### Finding Good Parameters\n",
        "\n",
        "Having a loss function is great, but tracking the accuracy of our model is something easier to understand, for us mere mortals. Here's the definition for our accuracy:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "4AWiqHzlt59W",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def calculate_accuracy(y_true, y_pred):\n",
        "  predicted = y_pred.ge(.5).view(-1)\n",
        "  return (y_true == predicted).sum().float() / len(y_true)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "LwyrFDedbU-B",
        "colab_type": "text"
      },
      "source": [
        "We convert every value below 0.5 to 0. Otherwise, we set it to 1. Finally, we calculate the percentage of correct values.\n",
        "\n",
        "With all the pieces of the puzzle in place, we can start training our model:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "D6hnlmt1ciGo",
        "colab_type": "code",
        "outputId": "563a7506-d51c-4b76-960f-da47e36745dc",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 697
        }
      },
      "source": [
        "def round_tensor(t, decimal_places=3):\n",
        "  return round(t.item(), decimal_places)\n",
        "\n",
        "for epoch in range(1000):\n",
        "    \n",
        "    y_pred = net(X_train)\n",
        "    \n",
        "    y_pred = torch.squeeze(y_pred)\n",
        "    train_loss = criterion(y_pred, y_train)\n",
        "    \n",
        "    if epoch % 100 == 0:\n",
        "      train_acc = calculate_accuracy(y_train, y_pred)\n",
        "\n",
        "      y_test_pred = net(X_test)\n",
        "      y_test_pred = torch.squeeze(y_test_pred)\n",
        "\n",
        "      test_loss = criterion(y_test_pred, y_test)\n",
        "\n",
        "      test_acc = calculate_accuracy(y_test, y_test_pred)\n",
        "      print(\n",
        "f'''epoch {epoch}\n",
        "Train set - loss: {round_tensor(train_loss)}, accuracy: {round_tensor(train_acc)}\n",
        "Test  set - loss: {round_tensor(test_loss)}, accuracy: {round_tensor(test_acc)}\n",
        "''')\n",
        "    \n",
        "    optimizer.zero_grad()\n",
        "    \n",
        "    train_loss.backward()\n",
        "    \n",
        "    optimizer.step()"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "epoch 0\n",
            "Train set - loss: 2.513, accuracy: 0.779\n",
            "Test  set - loss: 2.517, accuracy: 0.778\n",
            "\n",
            "epoch 100\n",
            "Train set - loss: 0.457, accuracy: 0.792\n",
            "Test  set - loss: 0.458, accuracy: 0.793\n",
            "\n",
            "epoch 200\n",
            "Train set - loss: 0.435, accuracy: 0.801\n",
            "Test  set - loss: 0.436, accuracy: 0.8\n",
            "\n",
            "epoch 300\n",
            "Train set - loss: 0.421, accuracy: 0.814\n",
            "Test  set - loss: 0.421, accuracy: 0.815\n",
            "\n",
            "epoch 400\n",
            "Train set - loss: 0.412, accuracy: 0.826\n",
            "Test  set - loss: 0.413, accuracy: 0.827\n",
            "\n",
            "epoch 500\n",
            "Train set - loss: 0.408, accuracy: 0.831\n",
            "Test  set - loss: 0.408, accuracy: 0.832\n",
            "\n",
            "epoch 600\n",
            "Train set - loss: 0.406, accuracy: 0.833\n",
            "Test  set - loss: 0.406, accuracy: 0.835\n",
            "\n",
            "epoch 700\n",
            "Train set - loss: 0.405, accuracy: 0.834\n",
            "Test  set - loss: 0.405, accuracy: 0.835\n",
            "\n",
            "epoch 800\n",
            "Train set - loss: 0.404, accuracy: 0.834\n",
            "Test  set - loss: 0.404, accuracy: 0.835\n",
            "\n",
            "epoch 900\n",
            "Train set - loss: 0.404, accuracy: 0.834\n",
            "Test  set - loss: 0.404, accuracy: 0.836\n",
            "\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Fb4WPtLjfn7m",
        "colab_type": "text"
      },
      "source": [
        "During the training, we show our model the data for `10,000` times. Each time we measure the loss, propagate the errors trough our model and asking the optimizer to find better parameters.\n",
        "\n",
        "The `zero_grad()` method clears up the accumulated gradients, which the optimizer uses to find better parameters.\n",
        "\n",
        "What about that accuracy? 83.6% accuracy on the test set sounds reasonable, right? Well, I am about to disappoint you. But first, let's learn how to save and load our trained models."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "KIRPLYNnu3my",
        "colab_type": "text"
      },
      "source": [
        "## Saving the model\n",
        "\n",
        "Training a good model can take a lot of time. And I mean weeks, months or even years. So, let's make sure that you know how you can save your precious work. Saving is easy:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "EKVMkwgMxGZB",
        "colab_type": "code",
        "outputId": "a7c21c43-72f0-4980-c0ad-1847bb7b7fcf",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 71
        }
      },
      "source": [
        "MODEL_PATH = 'model.pth'\n",
        "\n",
        "torch.save(net, MODEL_PATH)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "/usr/local/lib/python3.6/dist-packages/torch/serialization.py:360: UserWarning: Couldn't retrieve source code for container of type Net. It won't be checked for correctness upon loading.\n",
            "  \"type \" + obj.__name__ + \". It won't be checked \"\n"
          ],
          "name": "stderr"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "-61Wk5E0gqWY",
        "colab_type": "text"
      },
      "source": [
        "Restoring your model is easy too:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "9ckrjxYPxZ4w",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "net = torch.load(MODEL_PATH)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "5CobNIWq3OQc",
        "colab_type": "text"
      },
      "source": [
        "## Evaluation\n",
        "\n",
        "Wouldn't it be perfect to know what kinds of errors your model makes? Of course, that's impossible. But you can get an estimate.\n",
        "\n",
        "Using just accuracy wouldn't be a good way to do it. Recall that our data contains mostly no rain examples.\n",
        "\n",
        "One way to delve a bit deeper into your model performance is to assess the precision and recall for each class. In our case, that will be *no rain* and *rain*:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "kvaK-sVE1Xmy",
        "colab_type": "code",
        "outputId": "031e2faf-1d2b-47da-8bfa-ad9df02c899c",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 170
        }
      },
      "source": [
        "classes = ['No rain', 'Raining']\n",
        "\n",
        "y_pred = net(X_test)\n",
        "\n",
        "y_pred = y_pred.ge(.5).view(-1).cpu()\n",
        "y_test = y_test.cpu()\n",
        "\n",
        "print(classification_report(y_test, y_pred, target_names=classes))"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "              precision    recall  f1-score   support\n",
            "\n",
            "     No rain       0.85      0.96      0.90     19413\n",
            "     Raining       0.74      0.40      0.52      5525\n",
            "\n",
            "    accuracy                           0.84     24938\n",
            "   macro avg       0.80      0.68      0.71     24938\n",
            "weighted avg       0.83      0.84      0.82     24938\n",
            "\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RGHvrs7CkNOe",
        "colab_type": "text"
      },
      "source": [
        " A maximum precision of 1 indicates that the model is perfect at identifying only relevant examples. A maximum recall of 1 indicates that our model can find all relevant examples in the dataset for this class.\n",
        "\n",
        " You can see that our model is doing good when it comes to the *No rain* class. We have so many examples. Unfortunately, we can't really trust predictions of the *Raining* class.\n",
        "\n",
        " One of the best things about binary classification is that you can have a good look at a simple confusion matrix:"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "d6g_WirP1iMz",
        "colab_type": "code",
        "outputId": "556adc5f-8da3-482a-ab56-99fa1163be5a",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 529
        }
      },
      "source": [
        "cm = confusion_matrix(y_test, y_pred)\n",
        "df_cm = pd.DataFrame(cm, index=classes, columns=classes)\n",
        "\n",
        "hmap = sns.heatmap(df_cm, annot=True, fmt=\"d\")\n",
        "hmap.yaxis.set_ticklabels(hmap.yaxis.get_ticklabels(), rotation=0, ha='right')\n",
        "hmap.xaxis.set_ticklabels(hmap.xaxis.get_ticklabels(), rotation=30, ha='right')\n",
        "plt.ylabel('True label')\n",
        "plt.xlabel('Predicted label');"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nH5rebTJy2KAye6zl1wPx+jO1/PMKft4bq3c/+rfp86ceG3Ld8gEAoDobMfwRuboWNhut+Xx9pccs\nzv/nItO/7z5e9I7q1HEps+eOzrdr8ovjJUmZmVlaFlaya/zX2N9MI1O63ulv8eBJFxdnffThP0yf\nb9jwfaVyBABUX6mpqXr//fdVs2ZNzZ49u8RZVuUp3iHduXPZg5VLr+Xk5Ojo0aNmY/j4+MjXt2xD\nWhF/f/8yzywdo2iPOb6+vvLx8bEYoyqq7czuIq1bt9bDDz+sDRs2aNmyZZo0aZLFvXfeeaeWL1+u\n7OxsRUdHq0+fPmb3ff994S8sNWvW1B133HFd8s7NzTVdGywM08/KylJkZKTZNQCorFOnk7Vvf8kf\nNmfPnjNdlz5Isn49LwX0uPL2qFuaNdGIIQO0JvwbZV/O0Zi//V2PBT2se+66U96eHrpwKVO798Zq\n1VcbdOG/byO+757u6n5n2R+EDg4OevPl5/XUcy8rKztbz7z4mp4YPlj39uwqF2dnHT3+h8LWhOvI\nsT8kSXf6367hQyz/QfBa7dy9TyErPlePrp11d7cuatPqFnl6uKvAUKDEpD8V+WOMNm/7yfTf6ceH\nDVKPrtfn5wIAANXdmNGPma7DwioeYVLk4MEE/fPdxXpt+ou6664u+nnXJr3//ieKi4uXs3Nt9e9/\nn1584RlTEfyll2crLe1smTivTH9La1Z9IklavGieeve+W2s+X6eTJxNV26m27ryzkyZNGqt2bVtJ\nkhITk7XwQ8uHeQEAIElz5sxRZmamRo0aZbEz2pwTJ05IkmrUqKHGjRtb3Ne0adMS99x+++0lPpcq\nPlewKEZmZqZSU1NNhevU1FTTBIzKxEhNTTU982pV+2K3JE2aNEkbN27UhQsXyp3d3adPH9WrV09n\nz57Ve++9p27dusnVteTc1cOHD2v16tWSpH79+pUZym4t3t7eqlOnjrKyshQVFaX777+/zJ558+Yp\nIyPjujwfQPWxb/9BvfH2+xbXS691vaNjiWK3JL364kTl5+fry6+/0+WcHC1fE67la8LNxusT0EPz\nZ/7d4vNubddai+bP1Muz5uts+jktXblWS1eWPcDi7u5d9N6c6apVzoHC1pCfn6+fdu3RT7ssHzLi\nWLOmJowZqQljKvd2MwAAUDVt27bSPfd0lyQd+O2Q9uzdX6X735z5Tzk51dKUyRN0261tFfLvBWX2\n5OXl6eW/z1FIqPl/M3755QY96+mhBe/NUp06Lhr+6KASo0+KOxifoBGPPaPz5y9UKU8AsAtG802Z\nqLoffvhBW7ZsUcOGDTV58uQq3XvuXGGTmru7u2rVsnyeRPHaZek6YlGMevXKPwer+HpGRoap2F10\nf1ViXGstk2K3pBYtWmjw4MEKDw/XqVOWZ6Y5OTlp+vTpeumll3T06FE9/vjjmjJlivz9/ZWTk6Nt\n27Zp4cKFys3NVZ06dfTyyy9ft5wdHR3Vv39/rV+/XuHh4XJ3d9ejjz6q+vXr68SJE/rss8+0efNm\ntW7dWseOHbtueQBAZTg61tSsV17UsEce1LpvNyv2wCElp6QqKztbzrVry6dhfXXqcKsGPtCnUp3P\n3e/019f/+VRrIr7R1u0xOp2coqzsbHl5eKhjh/Z65KF+6tfr7uv+uoIe7q8G9bwVF39Yvx89ofSM\n88rIuCCD0SA3V1e1uqWZunXppKED75dvw2s/lAQAAJg3ZvQI03VY2OdXFePV6f/QV199q2eeeVL3\n9eqpRo18VFBQoFOJSYqMjNaixZ/peLHZ3OaEhK7Ud99v1dP/b6T69glQu3at5eHhpvz8Av311xnF\n7v9NEes2ae3ar5WXl3dVeQIArCs8PFwRERGV3h8UFKShQ4dex4wKXbp0SXPnzpUkvfbaa2UabiuS\nnZ0tSapdu3a5+5ydnU3Xpc8pLIrh5OR0VTGKX1eUR9F6ZmZmufsqQrH7v5577jlt2LChwl84Bg0a\npL/++kvvvfeeEhISNHHixDJ7PDw8tHjxYtNw9uvl5Zdf1p49e5SUlKSwsDCFhYWVWH/ggQfUq1cv\nvf7669c1DwA3tyEP99eQh/tbJVbH29qr423trRLLw91NE0aP1ITR1u+WbtLIR7/tqPhQq8a+Phox\nZIBGXMdRKQAAoGKvv/H/2bvTKCvLM1/4/80sCELJ1KAYiXM54HBsEw1OxDfJaaPQnQTTjdFgjLqM\ntuZ4jB2NQ1ySrNMae7Wa7gYDaqK02uDQJ/pG0TjiyAE8QLQNxihIWYhIFKGqrP1+8GUHqCooYMNm\nU7/fWs9aT+37vq/n2vvjxcX1/CQ/vPwnWxznxZdm58WXZm9RjLfeWpyrr7k+V1/TsjscgO3PokWL\n8sILL7R7/5FHHrkVs/mzf/zHf8y7776bkSNHtvlySFpS7P7/7b777hkzZkz+/d833gUwfvz4HH30\n0bn99tvz/PPPp76+Pp07d87uu++e448/Pt/61re22viStQ0YMCD33ntvbrnlljz22GN59913s/PO\nO2fvvfcu/SvTtGmtjwkAAAAAgI5u6NChm1TAHjp06FbM5lP/5//8n0ydOjU9evTIj370o82KsdNO\nn75rYvXq1Rvct/YLnXv27NkiRmNj4zrvDtyUGGvfbyyPNeu9evXa4L6N2eGL3WPGjGn3fy245ppr\ncs0117Rr73777ZfrrrtuS1Jr1V/+5V/m1Vdfbff+mpqaXH755bn88stbXd/Q999tt902+KzHHnts\no8/fWAwAAAAAOpDmYqUz2CSbUjvcVq6++uoUi8Wcc845G32xY1v69euXJFmxYkWamprSpY33WS1b\ntqx037dv3xYxVqxYkffea/li5rWtvb52jDU5rL9nQzHWz2FT7fDFbgAAAACAavH2228nSW688cbc\neOONG9x72WWX5bLLLkuSvPjii+nTp0+SZM8990ySNDc3Z9GiRdljjz02+Ky1z6z995tvvpm33nqr\nXfn26tWr9HLKJBk4cGB69uyZlStXtjvG+jlsqk5bdBoAAAAAgO1KbW1t6X7OnDlt7ps9+9N3VXTv\n3j177bVXqzHq6upSV1fXZow18dd+ZpIUCoXSZ3Pnzm3z/JIlS0rx14+xqXR2AwAAAADl0dxc6Qyq\n3q9+9as0b+B3/L//9/+WRhp/73vfy4knnphk3XnXRxxxRPr06ZMVK1bk4Ycfzle/+tUWcRoaGkpj\njD//+c+nR48e66wff/zxufnmm5MkDz30UM4444wWMebPn58//vGPSZITTjihxfrxxx+fF198MW++\n+WYWLFiQ/fffv8Wehx9+uHTfWoxNobMbAAAAAGA7se+++2b//fdv8xo2bFhp75AhQ0qfd+7cufR5\nly5d8vWvfz1J8vjjj+fll19u8ZzJkyeXZnZ/85vfbLF+0EEH5eCDD06STJo0KcuXL19nvVgs5vrr\nr0/y6csoTznllBYxRo8eXXpR5fXXX59icd2Z7suXL8+kSZOSJIcccsgWd3YrdgMAAAAAlNnrr7+e\n2bNnl64lS5aU1hYsWLDO2toviiyX73znOxk0aFCam5tz7rnnZvr06amvr89bb72Vn/3sZ6V54CNH\njszIkSNbjfGDH/wgXbp0SX19fcaNG5dnnnkmy5Yty4IFC3LBBRfk6aefTpKcd955qampaXG+pqYm\n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\nFStW5L333ttgbmuvrx1jTQ7r79lQjPVz2FSdtug0AAAAAABbzUsvvZTvfe97aWxszLBhw/KLX/xi\nnUJya/bcc88kSXNzcxYtWtTmvrfffrvFmfX/fuuttzb4rDUxevXqVXo5ZZIMHDiw1N3d3hjr57Cp\nFLsBAAAAALZD8+bNy3e/+918/PHHGTRoUCZPnpyBAwdu9FxtbW3pfs6cOW3umz17dpJPXxC51157\ntRqjrq4udXV1bcZYE3/tZyZJoVAofTZ37tw2zy9ZsqQUf/0Ym0qxGwAAAABgO/P6669n/Pjx+fDD\nD9OvX79Mnjw5u+22W7vOHnHEEenTp0+S5OGHH251T0NDQx577LEkyec///n06NFjnfXjjz++dP/Q\nQw+1GmP+/Pn54x//mCQ54YQTWqyvifHmm29mwYIFrcZYO7/WYmwKxW4AAAAAoCyKzdV1ba/efvvt\nfPvb387777+f3r175xe/+EU++9nPtvt8ly5d8vWvfz1J8vjjj+fll19usWfy5Mmlmd3f/OY3W6wf\ndNBBOfjgg5MkkyZNyvLly9dZLxaLuf7665N8+jLKU045pUWM0aNHl0aZXH/99SkWi+usL1++PJMm\nTUqSHHLIITq7AQAAAAC2N6+//npmz55dupYsWVJaW7BgwTpra78ocunSpTnzzDNTV1eXbt265YYb\nbsgee+yRjz76qNXr448/bvX53/nOdzJo0KA0Nzfn3HPPzfTp01NfX5+33norP/vZz3LjjTcmSUaO\nHJmRI0e2GuMHP/hBunTpkvr6+owbNy7PPPNMli1blgULFuSCCy7I008/nSQ577zzUlNT0+J8TU1N\nzjvvvCSfvmTzggsuyIIFC7Js2bI888wzGTduXOrr69OlS5dceumlm/dDr6VQXL+cDtuZxqULK50C\nALAD2WnIFyqdAgCwg2lqaPsFgB3N0i8fW+kUNkn/h57YarHHjRuXF154oV17J0yYkDFjxiRJpk2b\nlssuu6zdzxk6dGhpHMn65s+fn7PPPjv19fWtro8YMSKTJk1K796924w/ffr0XHHFFWlsbGx1fezY\nsbn66qs3mOOVV16ZqVOntrrWtWvXXHvttTn11FM3GKM9umxxBAAAAACAJNmOR4N0RAcccEAeeOCB\nTJ48OTNmzMjixYvTtWvXDB8+PCeffHLGjh2bLl02XCIePXp0DjjggEyZMiXPPfdc6uvrs8suu6S2\ntjannXbaOrO923L11VfnuOOOy1133ZV58+blgw8+yIABA3LUUUfljDPOyL777luW76uzm+2ezm4A\noJx0dgMA5aaz+8+W/j9V1tn9/269zm62PTO7AQAAAACoesaYAAAAAABlUTTGhArS2Q0AAAAAQNVT\n7AYAAAAAoOopdgMAAAAAUPXM7AYAAAAAysLMbipJZzcAAAAAAFVPsRsAAAAAgKpnjAkAAAAAUBbG\nmFBJOrsBAAAAAKh6it0AAAAAAFQ9xW4AAAAAAKqemd0AAAAAQHkUC5XOgA5MZzcAAAAAAFVPsRsA\nAAAAgKpnjAkAAAAAUBbF5kpnQEemsxsAAAAAgKqn2A0AAAAAQNUzxgQAAAAAKItic6HSKdCB6ewG\nAAAAAKDqKXYDAAAAAFD1FLsBAAAAAKh6ZnYDAAAAAGVRbK50BnRkOrsBAAAAAKh6it0AAAAAAFQ9\nY0wAAAAAgLIoFguVToEOTGc3AAAAAABVT7EbAAAAAICqp9gNAAAAAEDVM7MbAAAAACiLYnOlM6Aj\n09kNAAAAAEDV26zO7gkTJpQ7jyTJZZddtlXiAgAAAACwY9usYvdtt92WQqFQ7lwUuwEAAACgihWb\ny18zhPba7JndxWKxnHlsleI5AAAAAAAdw2YVu1988cVy5wEAAAAAAJtts4rdvXv3LnceAAAAAECV\nK/MwCNgknSqdAAAAAAAAbCnFbgAAAAAAqt5mv6ByYxobG/PEE09k1qxZqa+vz6pVq/LDH/4wgwcP\nLu1ZuXJlGhoa0qVLl+y8885bKxUAAAAAAHZwW6XYPWPGjFxzzTV59913kyTFYjGFQiEXXnjhOvvu\nu+++/PjHP85OO+2Up59+Oj179twa6QAAAAAA20CxuVDpFOjAyj7GZPr06fne976Xurq6FIvFdO7c\nuc29f/3Xf52ePXvm448/zowZM8qdCgAAAAAAHURZi93vvPNOrrzyyjQ3N2f//ffPnXfemVdeeaXN\n/d27d8+oUaOSJM8++2w5UwEAAAAAoAMp6xiT22+/PQ0NDRkyZEjuuOOOds3hPvzww3P//ffnd7/7\nXTlTAQAAAAC2MWNMqKSydnY/++yzKRQKOf3009v9wsk999wzSbJ48eJypgIAAAAAQAdS1mL3okWL\nkiQjRoxo95nevXsnST766KNypgIAAAAAQAdS1mJ3Q0NDkmzwpZTrW7lyZZKkR48e5UwFAAAAAIAO\npKzF7pqamiR/7vBuj9deey1J0r9//3KmAgAAAABsY8VidV3sWMpa7D7ggAOSJC+++GK7zzzwwAMp\nFAo59NBDy5kKAAAAAAAdSFmL3SeddFKKxWLuvffeLFmyZKP7f/WrX2XWrFlJki996UvlTAUAAAAA\ngA6krMXur371qxk+fHgaGhpyxhlnZPbs2eusFwqFJMlbb72Vq666Ktdee20KhUIOPvjgHHvsseVM\nBQAAAADYxorNhaq62LEUisXyTqdZuHBhTjvttHzwwQcpFAr5i7/4iyxevDiFQiHDhw/Phx9+mHff\nfTdJUiwWs+uuu+aee+7JkCFDypkGO5DGpQsrnQIAsAPZacgXKp0CALCDaWpo//vrdnQLDzqp0ils\nkuGv/KbSKVBGZe3sTpLhw4fnnnvuyUEHHZRisZjFixeX1hYuXJi6uroUi8UUi8XU1tbm3//93xW6\nAQAAAADYIl22RtBhw4blnnvuyTPPPJPf/OY3eeWVV/Lee+/lk08+Sb9+/XLggQfmi1/8Yk444YSt\n8XgAAAAAoAKKRaNBqJytUuxe4+ijj87RRx+9NR8BAAAAAADlH2MCAAAAAADbmmI3AAAAAABVb6uN\nMWlqaspvfvObPPPMM3n11VezfPnyJEnfvn2z77775uijj85JJ52ULl226iQVAAAAAGAbKTZXOgM6\nsq1Saf7tb3+bq666KnV1daXPisVikmTRokWZN29epk2blsGDB+eqq67KscceuzXSAAAAAACggyj7\nGJOpU6fmvPPOS11dXYrFYorFYvr06ZPhw4dn+PDh6dOnT+nzd955J+eee27uvvvucqcBAAAAAEAH\nUtbO7t/97ne59tpr09zcnG7duuX000/P1772teyxxx7r7HvzzTdz991354477khDQ0OuueaaHHLI\nIdl3333LmQ4AAAAAsA01FwuVToEOrKyd3ZMnT05TU1N69OiRKVOm5H/8j//RotCdJHvssUcuueSS\nTJ48Od27d88nn3ySX/ziF+VMBQAAAACADqSsxe7nn38+hUIhp59+eg477LCN7j/88MMzbty4FIvF\nPP/88+VMBQAAAACADqSsxe5ly5YlSUaOHNnuM8cdd9w6ZwEAAAAAYFOVdWZ33759U19fnx49erT7\nzJq9ffv2LWcqAAAAAMA2VjSzmwoqa2f3AQcckCR57bXX2n3m1VdfTZLU1taWMxUAAAAAADqQsha7\nTzvttBSLxfziF7/I6tWrN7p/1apVufXWW1MoFPLNb36znKkAAAAAANCBlLXYfeyxx+bMM8/M66+/\nnjPPPDNvvvlmm3v/8Ic/5Mwzz8wbb7yR8ePH5wtf+EI5UwEAAAAAtrFic6GqLnYsmzWz+/bbb29z\n7S/+4i9y0EEHZdasWfnyl7+cww47LAcddFD69++fJFm6dGleeeWVzJo1K8ViMQcffHAGDhyY22+/\nPaeffvrmfQsAAAAAADq0QrFYLG7qof322y+Fwsb/5aNYLLa5b/21QqGQ+fPnb2oqdACNSxdWOgUA\nYAey0xD/oxAAKK+mhkWVTmG78bt9vlLpFDbJfq/9utIpUEab1dmdfFqs3tJ9m1FnBwAAAAC2U8p9\nVNJmFbvvu+++cucBAAAAAACbbbOK3fvtt1+58wAAAAAAgM3WqdIJAAAAAADAltrsmd0AAAAAAGsr\nNhcqnQIdmM5uAAAAAACq3lbr7G5qasqsWbMyf/78vP/++1m9enWKG3kd62WXXba10gEAAAAAYAe2\nVYrdU6dOzU033ZT33ntvk84pdgMAAABA9WouGmOSJMViMQsXLszcuXNL16uvvprGxsYkyYwZM7Lb\nbrttNE5TU1OmTp2aBx98MG+88UYaGhoyZMiQjBo1KmeccUZqamo2GmPZsmWZMmVKHn300SxevDjd\nunXLnnvumZNPPjljx45Nly4bLxG/+uqrue222zJz5swsXbo0u+yyS2prazN27Ngcf/zxG/9Bkjz+\n+OOZOnVq5s2blw8++CD9+/fP5z73uXzrW9/Kvvvu264YG1MobqzdehPdcMMNmThx4ka7uJOkUCiU\n9hUKhSxYsKCcqbCDaFy6sNIpAAA7kJ2GfKHSKQAAO5imhkWVTmG78X+H/1WlU9gkBy78z60S9+23\n386JJ57Y5np7it1/+tOfMn78+MyZM6fV9QEDBmTixInZf//924wxf/78nH322amvr291fcSIEZk0\naVJ69+7dZozp06fniiuuKBXq13faaaflqquuavuLJLnyyiszderUVte6deuWH//4xzn11FM3GKM9\nyjqz+5VXXsm//du/Jfn0h/rlL3+ZX/7yl0k+LWY///zzeeSRR3LDDTfkv/23/5ZisZgjjjgijz32\nWF544YVypgIAAAAAUHGDBw/OF7/4xRxxxBGbdO7iiy/OnDlzUigUcs455+SRRx7JU089lQkTJqR3\n796pr6/Pd7/73SxfvrzV88uXL88555yT+vr69OnTJxMmTMhTTz2VRx55JOecc04KhUJmz56diy++\nuM0cXn755Vx++eVpbGzMPvvsk1tvvTUzZ87MtGnTMmrUqCTJXXfdlYkTJ7YZY+LEiaVC96hRozJt\n2rTMnDkzt956a/bZZ580NDTkhz/8YV5++eVN+n1aU9Zi91133ZUk6d+/f6ZMmZIjjjgiu+yyS2l9\nl112ye67756vfOUrueOOO3L++efnpZdeyiWXXJKdd965nKkAAAAAAFRE3759c/PNN+fpp5/OE088\nkZtuuilHHXVUu88/8cQTefLJJ5MkF154YS666KIMGzYsAwcOzJgxY/Iv//IvKRQKqaury6RJk1qN\nMXHixNTV1aVQKOTnP/95xowZk4EDB2bYsGG56KKLcuGFFyZJnnzyydKz1veTn/wkTU1N6d+/f26/\n/fYcc8wxqampSW1tbW666aYcffTRSZJbbrkly5Yta3F+2bJlueWWW5IkxxxzTG666abU1tampqYm\nxxxzTG6//fb0798/TU1N+elPf9ru36ctZS12z5o1K4VCIX/3d3+XHj16bHT/+eefn6OPPjqzZs3K\nvffeW85UAAAAAIBtrFgsVNW1tey8884ZNWpUBgwYsFnn77zzziRJv379Mn78+BbrRxxxRI477rgk\nyT333JOmpqZ11puamnL33XcnSY477rhWu8rHjx+fvn37rvO8tb3yyiuZO3dukuSss85Kv3791lkv\nFAr5/ve/nyRZuXJl7r///hYxpk+fnpUrVyb5tFO9UFj3N+/Xr1/OOuusJMmcOXMyb968FjE2RVmL\n3e+++26SrDMnZu0v0Npcl7/5m79JsVjMgw8+WM5UAAAAAACqzqpVqzJz5swkyYknnphu3bq1uu/L\nX/5ykk/Hlaw/AuSll17KihUr1tm3vm7dupVGkTz77LNZtWrVOuuPP/54i2etr7a2NsOGDUuSPPbY\nYy3W18QYNmxYamtrN/g92oqxKcpa7G5oaEiSDBw4sPTZTjvtVLpf8wOvbc2PsXChlxACAAAAAB3b\nf/3Xf2X16tVJPn0vYlvWXlu/I3rtv9sTY/Xq1Xn99ddbjTFo0KAMHjy4zRiHHHJIqzms/dmaPa0Z\nPHhwBg0a1GaMTVHWYnefPn2SJB9//HHps7Xb2//whz+0OLNmgPoHH3xQzlQAAAAAgG2sWKyua3v0\nxhtvlO532223NvcNGTIknTp1anFm7b87deqUIUOGtBlj7fhtxdh99903mO+aGB999FHq6upKn9fV\n1ZVGmLQ3xvo5bKouW3R6PcOGDcv777+fN998M4ceemiSpGfPnhk6dGgWL16cJ598Mocffvg6Z554\n4okkWedFlgAAAAAAW9u0adMyffr0du8fPXp0xowZsxUzSt5///3S/a677trmvq5du6ZPnz5Zvnx5\nqaF4/Rh9+vRJ165d24xRU1NTum8rxoZyWH99+fLlpS7t9n6PtdfXz2FTlbXYfeihh2bOnDmZM2dO\nTj311NLnxx9/fH75y19mypQpOeCAA3LSSSeloaEh9913X+66664UCoUcdthh5UwFAAAAAGCDFi1a\nlBdeeKHd+4888sitmM2n1p6a0b179w3uXbO+poN6/RgbO9+jR4/SfVsx2poZvrEYa9+393t89NFH\nG9y3MWUtdo8cOTKTJ0/Oo48+mssvvzydO3dOkpx55pm59957s3r16vz93/99unTpkubm5jQ3N6dY\nLKZz584588wzy5kKAAAAALCNNRcLlU5hkwwdOnSTCthDhw7ditmwpcpa7D7qqKNy/vnnp6mpKXV1\ndaV5MEOHDs3111+fSy65JCtXrkxjY2PpTOfOnXP55ZeXxp4AAAAAAGwLY8aM2epjSTbVTjvtVLpf\n86LKtqxZ79mzZ6sxNnZ+1apVpfvWYjQ2NqahoWGzYqx9397v0atXrw3u25iyFrsLhULOP//8VtdO\nPPHEPPTQQ3nwwQfz2muv5ZNPPslnPvOZnHzyyfnMZz5TzjQAAAAAAKpSv379Svfvvfdem/saGxuz\nYsWKJEnfvn1bjbFixYo0NTWlS5fWy8DLli0r3bcWY8WKFRvMYf0c147R3u+x9vr6OWyqsha7N2bQ\noEE566yztuUjAQAAAACqxp577lm6f/vtt9vct3jx4jQ3N7c4s/bfzc3NWbRoUfbYY49WY6wdv7UY\nb775Zt56660N5rsmRq9evUovp0ySgQMHpmfPnlm5cmW7Y6yfw6bqtEWnAQAAAAD+f8Vioaqu7dHe\ne+9demHjnDlz2tw3e/bs0n1tbe06a2v/3Z4Y3bt3z1577dVqjLq6utTV1bUZY0389XMoFAqlz+bO\nndvm+SVLlpTirx9jUyl2AwAAAABsJ3r06JHPfe5zSZIZM2a0OTP74YcfTvLp6I/DDz98nbUjjjgi\nffr0WWff+hoaGvLYY48lST7/+c+nR48e66wff/zxpfuHHnqo1Rjz58/PH//4xyTJCSec0GJ9TYw3\n33wzCxYs2OD3aCvGplDsBgAAAADYjnzzm99M8ulM7cmTJ7dYf/nll/Pb3/42SfK1r32txUzuLl26\n5Otf/3qS5PHrfKonAAAgAElEQVTHH8/LL7/cIsbkyZNLM7vXPG9tBx10UA4++OAkyaRJk7J8+fJ1\n1ovFYq6//vokn76M8pRTTmkRY/To0aUXVV5//fUpFovrrC9fvjyTJk1KkhxyyCFb3Nm9WTO7R48e\nvUUPbU2hUMi0adPKHhcAAAAA2DbWq2V2aK+//no+/PDD0t9Lliwp3S9YsCBLly4t/T1s2LDU1NSU\n/j722GMzcuTIPPnkk7nxxhvz8ccf56//+q/To0ePPP3005kwYUKam5s3+I7E73znO3nwwQdTV1eX\nc889N5dddlmOOeaYrFq1Kvfee2/+7d/+LUkycuTIjBw5stUYP/jBD3L66aenvr4+48aNyw9+8IPs\nv//+qauryy233JKnn346SXLeeeetk/8aNTU1Oe+88/KP//iPeeqpp3LBBRfkvPPOy6BBg7JgwYL8\n5Cc/SX19fbp06ZJLL710E37d1hWK65fT22G//fZLoVBoUYnfokQKhTZb2enYGpcurHQKAMAOZKch\nX6h0CgDADqapYVGlU9huzNq9ZXfv9uywt+7farHHjRuXF154oV17J0yYkDFjxqzz2YoVK3LWWWe1\nOXN7wIABmThxYvbff/82486fPz9nn3126uvrW10fMWJEJk2alN69e7cZY/r06bniiivS2NjY6vrY\nsWNz9dVXt3k+Sa688spMnTq11bWuXbvm2muvzamnnrrBGO2xWZ3d++67bwqF7XOAOwAAAABAtevT\np0/uvPPOTJ06NQ888EDeeOONNDY2ZsiQITnxxBNz5plnttpNvbYDDjggDzzwQCZPnpwZM2Zk8eLF\n6dq1a4YPH56TTz45Y8eObTECZX2jR4/OAQcckClTpuS5555LfX19dtlll9TW1ua0005bZ7Z3W66+\n+uocd9xxueuuuzJv3rx88MEHGTBgQI466qicccYZ2XfffTfpt2nLZnV2w7aksxsAKCed3QBAuens\n/jOd3VTSZnV2AwAAAACsr7loGgSV06nSCQAAAAAAwJbS2c127+iDz6x0CgDADmRo710rnQIAALAV\nKHYDAAAAAGVRNMaECjLGBAAAAACAqqfYDQAAAABA1TPGBAAAAAAoi2ZjTKggnd0AAAAAAFQ9xW4A\nAAAAAKqeYjcAAAAAAFXPzG4AAAAAoCyKlU6ADk1nNwAAAAAAVW+rdXYvW7YsDz74YGbNmpX6+vqs\nWrUq//RP/5Tdd9+9tGfRokVZvnx5evTokc9+9rNbKxUAAAAAAHZwW6XYfccdd+SGG27IqlWrkiTF\nYjGFQiGrV69eZ9+sWbNyySWXpFu3bnnyySfTt2/frZEOAAAAALANNBcLlU6BDqzsY0z+9V//Nddd\nd10+/vjjJFmnk3t9X/nKV1JTU5PGxsY88sgj5U4FAAAAAIAOoqzF7t///vf5p3/6pyTJF77whTz+\n+OP5zW9+0+b+zp07Z9SoUSkWi3nuuefKmQoAAAAAAB1IWYvdd9xxR5qbm/PZz342t9xySwYPHrzR\nM4cddliS5LXXXitnKgAAAAAAdCBlndn9wgsvpFAoZNy4cenatWu7zqwZc7JkyZJypgIAAAAAbGNF\nM7upoLJ2dq8pWO+///7tPtOrV68kKc34BgAAAACATVXWYndzc3OSpFgstvvMhx9+mOTPRW8AAAAA\nANhUZS1219TUJEnefvvtdp+ZN29ekmTgwIHlTAUAAAAA2Maaq+xix1LWYveIESOSJE888US79heL\nxfzHf/xHCoVC6UWVAAAAAACwqcpa7P7KV76SYrGYX//613nttdc2uv/6668v7TvllFPKmQoAAAAA\nAB1IWYvdo0aNyqGHHpqmpqaceeaZ+d//+3+nsbGxtF4oFNLY2JjnnnsuZ599dm699dYUCoWMHDlS\nZzcAAAAAVLliClV1sWMpFDflbZLtsHTp0nzjG9/IokWLUigU0qVLlzQ1NSVJdt5556xcuXKdF1nu\nueeeueuuu9K3b99ypsEO5Mghx1Y6BQBgB1K3+v1KpwAA7GDefG9upVPYbjw5+GuVTmGTjFxyT6VT\noIzK2tmdJP3798+0adPypS99KUnS2NiYYrGYYrGYP/3pT/nkk09Kf5900kmZOnWqQjcAAAAAAFuk\ny9YIussuu+TGG2/MwoUL8+ijj+aVV17Je++9l08++ST9+vXLgQcemFGjRmW//fbbGo8HAAAAAKCD\n2SrF7jWGDx+es88+e2s+AgAAAADYTjSXdWAybJqyjzEBAAAAAIBtTbEbAAAAAICqt1XHmAAAAAAA\nHUdzCpVOgQ6srMXuI488crPPFgqFPP/882XMBgAAAACAjqKsxe4VK1Zs9tlCwb/6AAAAAACwecpa\n7D7hhBM2WrT++OOP8/vf/z51dXUpFArZe++9s/vuu5czDQAAAAAAOpiyFrtvueWWdu99/vnn86Mf\n/SjvvPNO/uEf/iFHHXVUOVMBAAAAALaxopndVFCnSj34L//yL3PnnXemR48eufDCC7NkyZJKpQIA\nAAAAQJWrWLE7SXbdddecccYZ+eCDD3LrrbdWMhUAAAAAAKpYRYvdSXLYYYclSZ588skKZwIAAAAA\nbInmKrvYsVS82N21a9ckMcYEAAAAAIDNVvFi9+zZs5Mk3bt3r3AmAAAAAABUqy6VfPjvfve73HLL\nLSkUCtlvv/0qmQoAAAAAsIWKKVQ6BTqwsha7b7/99o3uaW5uzooVK/LKK69k5syZaWpqSqFQyDe+\n8Y1ypgIAAAAAQAdS1mL3ddddl0Kh/f96UywWkyTf+MY38t//+38vZyoAAAAAAHQgZR9jsqaAvTHd\nunXLoYcemnHjxmXUqFHlTgMAAAAAgA6krMXu++67b6N7OnXqlF69emXQoEHp0qWiI8MBAAAAgDJq\nrnQCdGhlrTZ7ySQAAAAAAJVQ1mL3iy++mCQZMGBAPvOZz5QzNAAAAAAAtKmsxe5x48alUCjk2muv\nVewGAAAAgA7GGBMqqVM5g+20005Jkn322aecYQEAAAAAYIPKWuweNGhQkqSxsbGcYQEAAAAAYIPK\nWuw+5phjkiSzZs0qZ1gAAAAAANigsha7/+7v/i7du3fPlClTsnTp0nKGBgAAAAC2c8UUqupix1LW\nYvdnPvOZTJgwIX/6058yduzYPP744ykWi+V8BAAAAAAAtNClnMHOP//8JMmQIUPyxhtv5Lzzzkvv\n3r2z9957p0+fPuncuXObZwuFQv75n/+5nOkAAAAAANBBlLXY/eijj6ZQ+LT9v1AopFgsZsWKFRud\n4V0sFkvnAAAAAIDq1KzERwWVtdi98847K1oDAAAAALDNlbXY/dJLL5UzHAAAAAAAtMtmF7svu+yy\nFAqF/P3f/30GDhxYzpwAAAAAgCrUHFMfqJxOm3tw+vTpmT59elasWFHOfAAAAAAAYJNtdrEbAAAA\nAAC2F4rdAAAAAABUvbK+oBIAAAAA6LiKlU6ADk1nNwAAAAAAVU+xGwAAAACAqrfFY0zq6+vTs2fP\ncuSSIUOGlCUOAAAAALDtNVc6ATq0LS52f/vb3y5HHikUCpk/f35ZYgEAAAAA0LFscbG7WDR2HgAA\nAACAytriYveBBx6YnXbaqRy5AAAAAADAZtniYvdPfvKT7LXXXuXIBQAAAACoYs2FQqVToAPrVOkE\nAAAAAABgSyl2AwAAAABQ9bZ4jAkAAAAAQJIUK50AHZrObgAAAAAAqp5iNwAAAAAAVc8YEwAAAACg\nLJornQAd2mYXu2fMmJEkGTRoUNmSAQAAAACAzbHZxe6hQ4eWMw8AAAAAgB3Gm2++mV/96ld57rnn\n8vbbb2f16tXp3bt39t5775xwwgn5+te/nl69erV5vqmpKVOnTs2DDz6YN954Iw0NDRkyZEhGjRqV\nM844IzU1NRvNYdmyZZkyZUoeffTRLF68ON26dcuee+6Zk08+OWPHjk2XLhsvD7/66qu57bbbMnPm\nzCxdujS77LJLamtrM3bs2Bx//PGb9JtsbYViseglqWzXjhxybKVTAAB2IHWr3690CgDADubN9+ZW\nOoXtxr//xd9WOoVN8o13frVV4k6fPj1XXnllVq9e3eaeIUOGZOLEidlrr71arP3pT3/K+PHjM2fO\nnFbPDhgwIBMnTsz+++/fZvz58+fn7LPPTn19favrI0aMyKRJk9K7d+8Nfo8rrrgijY2Nra6fdtpp\nueqqq9o8v615QSUAAAAAUBbNheq6toa5c+fmH/7hH7J69erU1NTkRz/6UX79619n5syZueeeezJm\nzJgkyeLFi3PuueemoaGhRYyLL744c+bMSaFQyDnnnJNHHnkkTz31VCZMmJDevXunvr4+3/3ud7N8\n+fJWc1i+fHnOOeec1NfXp0+fPpkwYUKeeuqpPPLIIznnnHNSKBQye/bsXHzxxW1+j5dffjmXX355\nGhsbs88+++TWW2/NzJkzM23atIwaNSpJctddd2XixIll+NXKQ7EbAAAAAKBMbr/99jQ3N6dTp075\n13/91/zt3/5tPvvZz6ampiYHH3xwJkyYkLFjxyZJ/vjHP+bJJ59c5/wTTzxR+uzCCy/MRRddlGHD\nhmXgwIEZM2ZM/uVf/iWFQiF1dXWZNGlSqzlMnDgxdXV1KRQK+fnPf54xY8Zk4MCBGTZsWC666KJc\neOGFSZInn3yyxfPX+MlPfpKmpqb0798/t99+e4455pjU1NSktrY2N910U44++ugkyS233JJly5aV\n5bfbUordAAAAAABl8rvf/S5Jsscee+Tggw9udc8pp5xSul+4cOE6a3feeWeSpF+/fhk/fnyLs0cc\ncUSOO+64JMk999yTpqamddabmppy9913J0mOO+64HHHEES1ijB8/Pn379l3neWt75ZVXMnfup+N5\nzjrrrPTr12+d9UKhkO9///tJkpUrV+b+++9v9Xtua4rdAAAAAEBZNKdQVdfW0K1btySfFoTb0rlz\n59L9rrvuWrpftWpVZs6cmSQ58cQTS7HW9+UvfznJp+NKXn755XXWXnrppaxYsWKdfa3luGYUybPP\nPptVq1ats/7444+3eNb6amtrM2zYsCTJY4891uqebU2xGwAAAACgTGpra5Mkf/jDH0pd3uv79a9/\nneTTovNRRx1V+vy//uu/Si+1HDFiRJvPWHtt3rx566yt/Xd7YqxevTqvv/56qzEGDRqUwYMHtxnj\nkEMOaTWHSlHsBgAAAAAok7PPPjs9evRIc3Nzvvvd7+a+++5LXV1dVq1ald///ve57rrrctttt6VQ\nKOR//s//maFDh5bOvvHGG6X73Xbbrc1nDBkyJJ06dWpxZu2/O3XqlCFDhrQZY+34bcXYfffdN/hd\n18T46KOPUldXt8G920KXSicAAAAAAOwYipVOYBNNmzYt06dPb/f+0aNHZ8yYMRvcs/vuu+e2227L\nRRddlMWLF+fSSy9tseeYY47JmWeemWOOOWadz99///3S/drjTdbXtWvX9OnTJ8uXL8/y5ctbjdGn\nT5907dq1zRg1NTWl+7ZibCiH9deXL1+eQYMGbXD/1qbYDQAAAAB0SIsWLcoLL7zQ7v1HHnlku/aN\nGDEiN998cy699NK89tprLdaXLFmSt956q8XnH3/8cem+e/fuG3zGmvWVK1e2GmNj53v06FG6bytG\nWzPD2xOjEhS7AQAAAIAOaejQoe0uYK/ZvzHNzc356U9/milTpqRv37654oorcuyxx6ZPnz555513\ncv/99+e2227LVVddlVmzZuWnP/1paSQJW0axGwAAAADokMaMGbPRsSSb6uabb86UKVPSvXv33HHH\nHdlnn31Ka7vsskv222+/DB8+PJdffnkeeOCBHH744Rk7dmySZKeddirtXfOiyrasWe/Zs+c6n6+J\nsbHzq1atKt23FqOxsTENDQ2bHaMS/JMBAAAAAFAWzYXqusqtoaEhU6ZMSZL81V/91TqF7rX9zd/8\nTenlj3fffXfp8379+pXu33vvvTaf09jYmBUrViRJ+vbtu87amhgrVqxIU1NTmzGWLVtWum8rxoZy\nWH99/RiVoNgNAAAAAFAGr7/+ej788MMkyYEHHtjmvkKhUFr//e9/X/p8zz33LN2//fbbbZ5fvHhx\nmpubW5xZ++/m5uYsWrSozRhrx28rRmtzxVuL0atXr4q/nDJR7AYAAAAAKIu1R4cUi8UN7l1TrC4U\n/txivvfee5deLDlnzpw2z86ePbt0X1tbu87a2n+3J0b37t2z1157tRqjrq4udXV1bcZYE3/9HCpF\nsRsAAAAAKIvmKrvKbcCAAaX7efPmtbmvWCyW1ocMGVL6vEePHvnc5z6XJJkxY0abM7Mffvjh/H/s\n3XlY1PXax/EPCAgiKKiguOSWS4RLLpWae4ullZYeNM3d1EqP5jlZ6TGtk1qaaJollGtm5iO5ZJaK\nmruJe7jnglI4igiKyODw/MFhZGQGwQbHkffrXF7Xj/l+f/fvHs7zXAdu7rm/UubokAYNGlisNWzY\nUL6+vhb7bpWWlqaoqChJUpMmTeTp6Wmx3qpVK/P1Tz/9ZDVGTEyMzpw5I0lq3bq11T13G8VuAAAA\nAAAAALCDChUqqFKlSpKkH3/8UcePH7e6b8mSJeYRIE888YTFWrdu3SRlztSePXt2jnujo6O1YcMG\nSVLnzp3l5uZmse7m5qYuXbpIktavX6/o6OgcMWbPnm2e2Z31vOxCQkJUp04dSVJERIQSExMt1jMy\nMjR58mRJmQdTvvDCC1bf591GsRsAAAAAAAAA7OT111+XJKWmpqp79+765ptvFBsbq6SkJB05ckQT\nJ07UmDFjJEk+Pj7q06ePxf0tWrRQ8+bNJUlhYWEKCwtTbGysDAaDIiMjNWjQIJlMJgUGBqpfv35W\nc+jfv78CAwNlMpk0aNAgRUZGymAwKDY2VlOmTFFYWJgkqXnz5uZn3WrkyJFyc3OTwWBQjx49tGXL\nFiUkJOjQoUMaMmSINm/eLEkaPHiw/P39//43zg5cMm43PAZwsMZBLRydAgAAuI/EX7/k6BQAAMB9\n5vTF/Y5O4Z4xp3x3R6eQL73OLSiQuDNmzND06dPNc7mt8ff317Rp09SoUaMca0lJSerXr5/Nmdtl\nypRReHi4ateubTN+TEyMBgwYIIPBYHW9Xr16ioiIkI+Pj80YkZGRGj16tIxGo9X10NBQjR071ub9\ndxvFbtzzKHYDAAB7otgNAADsjWL3TbOdrNjdu4CK3ZJ0+PBhLVq0SNHR0Tp79qyuX7+u4sWLq2rV\nqmrRooX+8Y9/5NoRnZ6erkWLFmn58uU6efKkjEajgoKC1KZNG/Xu3TtP3dRZo1DWrVunuLg4ubu7\nq2rVqurQoYNCQ0NzjECx5siRI5ozZ462b98ug8GgEiVKKDg4WF27drWY7X0voNiNex7FbgAAYE8U\nuwEAgL1R7L6JYjcciZndAAAAAAAAAACnd/s+dQAAAAAAAADIA5OLozNAYUZnNwAAAAAAAADA6VHs\nBgAAAAAAAAA4PcaYAAAAAAAAALALk6MTQKFGZzcAAAAAAAAAwOlR7AYAAAAAAAAAOD2K3QAAAAAA\nAAAAp8fMbgAAAAAAAAB2wcxuOBKd3QAAAAAAAAAAp0exGwAAAAAAAADg9BhjAgAAAAAAAMAuMlwc\nnQEKMzq7AQAAAAAAAABOj2I3AAAAAAAAAMDpUewGAAAAAAAAADg9ZnYDAAAAAAAAsAuToxNAoUZn\nNwAAAAAAAADA6VHsBgAAAAAAAAA4PcaYAAAAAAAAALALxpjAkejsBgAAAAAAAAA4PYrdAAAAAAAA\nAACnxxgTAAAAAAAAAHaR4egEUKjR2Q0AAAAAAAAAcHoUuwEAAAAAAAAATo9iNwAAAAAAAADA6TGz\nGwAAAAAAAIBdmFwcnQEKMzq7AQAAAAAAAABOj2I3AAAAAAAAAMDpMcYEAAAAAAAAgF2YHJ0ACjU6\nuwEAAAAAAAAATo9iNwAAAAAAAADA6VHsBgAAAAAAAAA4PWZ2AwAAAAAAALALZnbDkejsBgAAAAAA\nAAA4PYrdAAAAAAAAAACnxxgTAAAAAAAAAHaR4egEUKjR2Q0AAAAAAAAAcHoUuwEAAAAAAAAATo8x\nJgAAAAAAAADswuTi6AxQmNHZDQAAAAAAAABwehS7AQAAAAAAAABOj2I3AAAAAAAAAMDpMbMbAAAA\nAAAAgF2YHJ0ACjU6uwEAAAAAAAAATo9iNwAAAAAAAADA6THGBAAAAAAAAIBdZDg6ARRqdHYDAAAA\nAAAAAJwexW4AAAAAAAAAgNOj2A0AAAAAAAAAcHrM7AYAAAAAAABgFyamdsOB6OwGAAAAAAAAADg9\nit0AAAAAAAAAAKfHGBMAAAAAAAAAdmFydAIo1OjsBgAAAAAAAAA4PYrdAAAAAAAAAACnxxgTAAAA\nAAAAAHaR4egEUKjR2Q0AAAAAAAAAcHoUuwEAAAAAAAAATo9iNwAAAAAAAADA6TGzGwAAAAAAAIBd\nmBydAAo1OrsBAAAAAAAAAE6PYjcAAAAAAAAAwOkxxgQAAAAAAACAXZhcHJ0BCjM6uwEAAAAAAAAA\nTo9iNwAAAAAAAADA6VHsBgAAAAAAAAA4PWZ2AwAAAAAAALALkzIcnQIKMTq7AQAAAAAAAABOj2I3\nAAAAAAAAAMDpMcYEAAAAAAAAgF0wxASORGc3AAAAAAAAAMDpUewGAAAAAAAAADg9xpgAAAAAAAAA\nsAuToxNAoUZnNwAAAAAAAADA6VHsBgAAAAAAAAA4PYrdAAAAAAAAAACnx8xuAAAAAAAAAHZhUoaj\nU0AhRrEbAAAAAAAAAArQ9u3bFRkZqejoaBkMBnl4eKhMmTIKCQlRixYt9Oyzz1q9Lz09XYsWLdKK\nFSt08uRJpaWlKSgoSG3btlWvXr3k7+9/22cnJCRozpw5Wrt2reLi4uTh4aEqVaqoQ4cOCg0NlZvb\n7UvER44c0dy5c7Vt2zZduHBBJUqUUHBwsEJDQ9WqVat8fz8KiktGRgZ/bsE9rXFQC0enAAAA7iPx\n1y85OgUAAHCfOX1xv6NTuGe8Xbmro1PIl4mnvi3Q+KmpqXrvvfe0cuVKm3vKly+vqKioHK8nJyer\nb9++2rdvn9X7ypQpo/DwcNWuXdtm7JiYGA0YMEAGg8Hqer169RQRESEfHx+bMSIjIzV69GgZjUar\n6127dtX7779v8/67iZndAAAAAAAAAOwiw8n+FaT09HS9/vrrWrlypdzd3dWzZ08tXrxY27Zt05Yt\nW7RgwQL16dNHAQEBVu8fPny49u3bJxcXFw0cOFBr1qzRpk2bNH78ePn4+MhgMOi1115TYmKi1fsT\nExM1cOBAGQwG+fr6avz48dq0aZPWrFmjgQMHysXFRXv37tXw4cNtvofo6GiNGjVKRqNRNWrU0Fdf\nfaVt27Zp6dKlatu2rSTp22+/VXh4+N//htkBnd2459HZDQAA7InObgAAYG90dt/0byfr7P64ADu7\nZ82apcmTJ6to0aIKDw/Xo48+mud7N27cqAEDBkiS/vnPf2rQoEEW67t27VL37t2VkZGh/v37a8SI\nETlifPLJJ4qIiJCLi4sWLFighg0bWqzPnDlTYWFhkqTw8HA1b948R4zOnTtr//79Kl26tFauXCk/\nPz/zWkZGhvr27astW7aoWLFiWrduXZ7GqhQkOrsBAAAAAAAAwI4uX76sGTNmSJIGDhyYr0K3JC1c\nuFCS5Ofnp759++ZYb9iwoVq2bClJ+v7775Wenm6xnp6ersWLF0uSWrZsmaPQLUl9+/ZVyZIlLZ6X\n3YEDB7R/f+Yfcvr162dR6JYkFxcXvfXWW5KklJQULVu2LD9vsUBQ7AYAAAAAAAAAO1q+fLlSU1Pl\n7u6uV155JV/3pqamatu2bZKkNm3ayMPDw+q+du3aScocVxIdHW2xtmvXLiUlJVnsu5WHh4d5FMnW\nrVuVmppqsb5+/focz7pVcHCwKlWqJElW547fbRS7AQAAAAAAANiFycn+FZSNGzdKkh5++GGVKFHC\n/PqNGzdkMuX+5GPHjun69euSMg+QtCX72u+//26xlv3rvMS4fv26jh8/bjVGYGCgypYtazNG3bp1\nrebgCBS7AQAAAAAAAMCODh48KEmqXr260tLSNGvWLLVr104hISEKDg5W27Zt9eGHH+qvv/7Kce/J\nkyfN1xUqVLD5jKCgILm6uua4J/vXrq6uCgoKshkje3xbMSpWrGjz/uwxrl69qvj4+Fz3FjQ3hz4d\nAAAAAAAAABxk6dKlioyMzPP+jh07qlOnTrnuSU1N1aVLmYeiu7u7q3v37tq3b5/FntjYWM2fP1/L\nli3TZ599pscee8y8lnWvJJUqVcrmc9zd3eXr66vExEQlJiZarGXF8PX1lbu7u80Y2Q+UtBUjtxxu\nXU9MTFRgYGCu+wsSxW4AAAAAAAAAdmFShqNTyJdz585p586ded7fuHHj2+5JTk42X3///fcyGo1q\n06aN3nzzTVWrVk2JiYlauXKlpkyZoqSkJA0ZMkTLly83jwq5du2a+f6iRYvm+qys9ZSUFIvXs2Lc\n7n5PT0/zta0YtmaG5yXG3UaxGwAAAAAAAEChVL58+TwVsLPvv53sM7mNRqNatGihGTNmyMXFRZIU\nEBCgPn36qGzZsho2bJguX76siIgIjRo1Kv9vABYodgMAAAAAAAAolDp16nTbsST55e3tbfH1G2+8\nYS50Z/fss89q5syZOnr0qNatW2cudnt5eZn3ZB1UaUvWerFixSxez4pxu/tTU1PN19ZiGI1GpaWl\n3XGMu40DKgEAAAAAAADYRYaT/SsI3t7e5tEfnp6eevjhh23ubdiwoSQpLi5OV69elST5+fmZ1y9e\nvGjzXqPRqKSkJElSyZIlLdayYiQlJSk9Pd1mjISEBPO1rRi55XDr+q0x7jaK3QAAAAAAAABgJy4u\nLqpcubIkycfHR66utkuwvr6+5usrV65IkqpUqWJ+7ezZszbvjYuLM49MyX5P9q9NJpPOnTtnM0b2\n+LZixB78VBQAACAASURBVMbG2rw/ewxvb2+HHk4pUewGAAAAAAAAALsKCQmRlNlZnX2G960SExPN\n1z4+PpKkBx980Hyw5L59+2zeu3fvXvN1cHCwxVr2r/MSo2jRoqpevbrVGPHx8YqPj7cZIyv+rTk4\nAsVuAAAAAAAAALCjNm3aSMqcmZ1bsfm3336TJFWuXNk879rT01OPP/64JGndunU2Z2avXr1aUubo\nkAYNGlisNWzY0Nw1nrXvVmlpaYqKipIkNWnSRJ6enhbrrVq1Ml//9NNPVmPExMTozJkzkqTWrVvb\neJd3D8VuAAAAAAAAAHZhcrJ/BaV58+aqVKmSJGnq1Km6ceNGjj2RkZE6ceKEpMzDKrPr1q2bpMyZ\n2rNnz85xb3R0tDZs2CBJ6ty5s9zc3CzW3dzc1KVLF0nS+vXrFR0dnSPG7NmzzTO7s56XXUhIiOrU\nqSNJioiIsOhCl6SMjAxNnjxZUubBlC+88EKOGHcbxW4AAAAAAAAAsCN3d3e9++67cnFx0bZt29S/\nf39FR0crMTFRp0+f1vTp0zV69GhJUvny5dW7d2+L+1u0aKHmzZtLksLCwhQWFqbY2FgZDAZFRkZq\n0KBBMplMCgwMVL9+/azm0L9/fwUGBspkMmnQoEGKjIyUwWBQbGyspkyZorCwMEmZhfmsZ91q5MiR\ncnNzk8FgUI8ePbRlyxYlJCTo0KFDGjJkiDZv3ixJGjx4sPz9/e3yvfs7XDIyMgrq4FHALhoHtXB0\nCgAA4D4Sf/2So1MAAAD3mdMX9zs6hXvG0Mqhjk4hX6aeWlSg8RcuXKiPPvpIRqPR6nrFihX15Zdf\nqlq1ajnWkpKS1K9fP5tjUMqUKaPw8HDVrl3b5vNjYmI0YMAAGQwGq+v16tVTRESEeV64NZGRkRo9\nerTN9xAaGqqxY8favP9uotiNex7FbgAAYE8UuwEAgL1R7L5pSOV/ODqFfJl26rsCf8bhw4c1b948\nbd++XQaDQUWLFlXVqlX11FNPqVu3buZZ3dakp6dr0aJFWr58uU6ePCmj0aigoCC1adNGvXv3zlM3\nddYolHXr1ikuLk7u7u6qWrWqOnTooNDQ0BwjUKw5cuSI5syZY34PJUqUUHBwsLp27Wox29vRKHbj\nnkexGwAA2BPFbgAAYG8Uu2+i2A1HYmY3AAAAAAAAAMDpUewGAAAAAAAAADi92w9kAQAAAAAAAIA8\nMDk6ARRqdHYDAAAAAAAAAJwexW4AAAAAAAAAgNNjjAkAAAAAAAAAuzApw9EpoBCjsxsAAAAAAAAA\n4PQodgMAAAAAAAAAnB5jTAAAAAAAAADYBUNM4Eh0dgMAAAAAAAAAnB7FbgAAAAAAAACA06PYDQAA\nAAAAAABweszsBgAAAAAAAGAXJqZ2w4EodgMA/pYibkXUtM1jqlWnpmqF1FBQpXIq6V9CviV8lHot\nVef/NOj3vYe1+v9+0W+bd9uM82BwdT3yWF3VrlNTVWtVkV+pkirh5yvJRZcvXdaJwye16ZctWrXk\nF11LuZZrTqUC/FW7Tk3VrltTterUVO06NVU6sJQkKXrrHg16+Z/5fp+urq568oXWavVsc9UKqSH/\nMn4yphl16UKijh/+Q9Fb92j10jVKvnwl37EBAEBOD1SpqJZtmqrx4w1UK7iGypULlLuHuxIvXdbR\nw8e1fs0mLf7mByUlJduMUdKvhFq1babHmjbSw3Vqq+ID5VXM20tXr6To1Mkz2rb5Ny2cu0RnTp3N\nc15PtHxcoT06qX7DOipV2l9Jl5N1/OgfWrZklRYv/EEmk+m2MXxL+KhHn3+o9ZNPqNqDVVTMu5gS\nLl5SzIHD+mHJKi1f+lOe8wEAADe5ZGRk8OcW3NMaB7VwdAoAchFQroxWRi/J097Na7Zq9Osf6OqV\nlBxr07+brMZPNLxtjPi48/rP6x9oz479Vte9fby1/sgqm/ffSbH7wYeq6f2p7+rB4Oq57hv40lDt\n3rY3X7EB3H3x1y85OgUAtzFp+gfq3PWF2+4znL+ot14fpY1RW3KshXbvpA8nvSd3d/dcY6SlGfXp\nhBmaOfXrXPe5urpqYtgYdXmlo809e6IPqN8rb+qCIcHmnmYtH9NnsybKv5SfzT1bft2h114dpuRk\n/ogOOIvTF63/flIYvVa5s6NTyJcvT33v6BRgR3R2AwD+tsSERO3etk8x+w7rz9i/dPF8glKupKhU\ngL9q1ampF19pr8CgADV7sok++fq/GtxlWI4Y6cYb2rtzvw7ujtEfR07p4vkEXbpwSd4+3gqqVE7t\n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\nRkaGU/271zz44IPmgyX37dtnc9/evXvN18HBwRZr2b/OS4yiRYuqevXqVmPEx8crPj7eZoys+Lfm\n4Ch0dgMAAAAAAACAHbzzzjt68803c93z4osvSpJatWqloUOHSpIqVKggSfL09NTjjz+uDRs2aN26\ndfrPf/4jDw+PHDFWr14tKXN0SIMGDSzWGjZsKF9fXyUlJWn16tV6/vnnc9yflpamqKgoSVKTJk3k\n6elpsd6qVSvNmDFDkvTTTz+pV69eOWLExMTozJkzkqTWrVvn+p7vFjq7AQAAAAAAAMAOKlasqNq1\na+f6L0vJkiXNr2U/yLJbt26SMmdqz549O8czoqOjtWHDBklS586d5eZm2c/s5uamLl26SJLWr1+v\n6OjoHDFmz55tntmd9bzsQkJCVKdOHUlSRESEEhMTLdYzMjI0efJkSZkHU77wwgu5f2PuEordAAAA\nAAAAAOzCpAyn+ncvatGihZo3by5JCgsLU1hYmGJjY2UwGBQZGalBgwbJZDIpMDBQ/fr1sxqjf//+\nCgwMlMlk0qBBgxQZGSmDwaDY2FhNmTJFYWFhkqTmzZubn3WrkSNHys3NTQaDQT169NCWLVuUkJCg\nQ4cOaciQIdq8ebMkafDgwfL39y+A70T+uWTci8NpgGwaB7VwdAoAAOA+En/9kqNTAAAA95nTF/c7\nOoV7RqsKTzo6hXxZf3bNXX9m1sGVHTt21IQJE6zuSUpKUr9+/WzO3C5TpozCw8MtOsVvFRMTowED\nBshgMFhdr1evniIiIiy6ym8VGRmp0aNHy2g0Wl0PDQ3V2LFjbd5/tzGzGwAAAAAAAADuIb6+vlq4\ncKEWLVqk5cuX6+TJkzIajQoKClKbNm3Uu3fv23ZTP/TQQ1q+fLlmz56tdevWKS4uTu7u7qpatao6\ndOig0NDQHCNQbtWxY0c99NBDmjNnjrZv3y6DwaASJUooODhYXbt2VatWrez5tv82Ortxz6OzGwAA\n2BOd3QAAwN7o7L6Jzm44Ep3dAAAAAAAAAOwi4x6dg43CgQMqAQAAAAAAAABOj2I3AAAAAAAAAMDp\nMcYEAAAAAAAAgF2YOB4QDkRnNwAAAAAAAADA6VHsBgAAAAAAAAA4PYrdAAAAAAAAAACnx8xuAAAA\nAAAAAHbBxG44Ep3dAAAAAAAAAACnR7EbAAAAAAAAAOD0GGMCAAAAAAAAwC5MDDKBA9HZDQAAAAAA\n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\n9dcKCQmRyWTSZ599pjfeeEORkZFavXq12rdv7+bVAgCAS8Hs7gUAAC4PpaWluvPOO+V0OvXss88q\nJiamyXhjX+7c3FxlZWVp8ODBevnll+Xj46MnnnhCkydPliTV19dr1apVev755/XVV1/p9ddf18yZ\nM3nkGAAAfCeTyaTy8nItWbJEb775ZpOx0NBQSVJhYaFee+01/eY3v3HHEgEAwCVmevzxxx939yIA\nAJ4vLy9PL7zwgsrLyxUQEKCkpCSZzU2/U125cqXmzp2r0tJS1dXVacOGDbr77rt10003STpb/W02\nm9WzZ09JUmpqqrKzszVgwABFRUW1+TkBAIAfv8b+3Onp6br33nv12WefSZJuu+023X777erdu7es\nVquysrIkSfv379eYMWPUrl07N64aAABcCoTdAIBW0a5dO9XV1enrr79WUlKSRo4c6eqX2XgTWlJS\noo8//ljV1dXKy8uT3W7XAw88oMDAQElyHW82mxUbG6tt27YpLy9PkjRgwACquwEAQDON1w+vvPKK\nNm7cqJiYGC1dulTTpk1TXFycBg4cqAkTJqihoUHHjx9XRUWFqqurdc0117AJNgAAlxmjuxcAALh8\nzJ07Vx988IHuv/9+GY1G2Wy2JuPjx4/XxIkTVV1draysLHXs2FGdOnVqdpwkBQcHa/78+ZLObmK5\ne/du2e32NjkPAADgWXJzc/X222/L4XBo1KhR6tOnjxwOhySpoaFBkjRjxgz94he/kCR98MEH2rZt\nm9vWCwAALg3CbgBAqwkKClL37t2Vm5ure++9V1u2bJHD4ZDBYHAF2vPnz1dQUJAMBoPy8vKUl5cn\ns9mslvZLHjdunMaOHSun06k33nhDRUVFbX1KAADAA1RVVamqqkoGg0FXXXWVTCaTa78Qi8Ui6Wzf\n7okTJ2r8+PGSpKVLl6q2ttZtawYAAK2PsBsA0KrsdrseffRRbdiwQW+//bZKS0slyRVox8XFaerU\nqXI6nTKZTPr8888lqcXHiM1ms+bMmSNJSklJ0ebNm1VfX992JwMAANzqYp/qKikpUX19vUJDQ+Xj\n49Pil+iS1L59e02aNEm+vr7au3ev3nnnndZcLgAAcDPCbgBAqzKZTK72I5999pm2bt3qeny48XHi\nOXPmqHPnzjpx4oR27typI0eOSFKLN6ZJSUmaMWOGJGn16tWuYwEAwOXL6XTK4XDIZDJJko4dO6aq\n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\nVEREhI4cOaK8vDwVFRVp8ODBCg0NlclkksFg0NatW/V///d/qqioUHp6utasWaPMzExFRUUpODhY\nJpNJDQ0NMplM6t27t1avXu3aNHv//v3as2ePXnjhBa1Zs0a+vr669957FR8fr8jISLk165gAABfz\nSURBVPn5+clmszVpdQIAAPBjRNgNAJdI482gj4+PfH19lZOTo6KiIhUXF2vSpEmyWCySzj5O7Ofn\np2HDhqlnz56qrq5WTk6O8vLyVF5eLqvVqlOnTunkyZO65ppr3HlKAADATQIDA2Wz2ZSamqri4mIF\nBQVpxIgROn78uJ566ik9/fTTqqiokNVqVX19vWpra5Wenq4dO3bo2LFjGjFihKxWq6Sz1yYRERHK\nyspSSUmJsrOzlZaWpuLiYkVFRWnhwoUaN25ck/c3Go0E3QAA4EePsBsA2kBwcLDq6+u1a9cu5ebm\nqnPnzurZs6ckNblx7NKli8aPHy+Hw6HS0lJVVFTIYDDI4XAoIyNDN9xwgwIDA911GgAAwE0MBoOi\noqJUUFCgw4cPKzs7W8eOHdNDDz2kb775RpJ066236qabbtLAgQPldDpVUlKiyspKffPNNzp8+LAM\nBoNiY2MlSQkJCRo0aJBsNpsiIyMVFRWln//85/rrX/+qHj16SPr2KTUAAABPYXCev2MJAOCSyM7O\n1t///ndt3LhRXbp00apVqxQWFtbkmMabSrvdrmPHjunhhx/W3r17dd111+l3v/udQkND3bR6AADw\nY7B9+3b94Q9/UGFhoet348eP129/+1t16tSpybGffvqpXnvtNaWkpLhakPzud79TcnKyoqOjmxxb\nV1cnX19fSZLNZpPZbL70JwMAANDKqOwGgDYSHBwsp9Opr776SkVFRfLx8dHQoUObHHNu9VRoaKhG\njhypW265RTfeeKN8fHzaeskAAOBHpkOHDiorK9PevXslSfPmzdMTTzzhanPSeC1hMBgUExOjcePG\nqaamRidOnFBVVZXS0tK0adMmde3aVVFRUTIajXI6nbJarWqsgzKZTG47PwAAgP+G0d0LAICfCqPR\nqEGDBrn6bv/73/9WRkbGBY+VpIiIiGZVWgAA4KfLy8tL1113nXr37i1JSktL07Fjx+RwOGQ2m5ts\nIul0OuXn56ff//73WrJkiWJjY1VVVaWcnBydPn3aFWqfG5DTtgQAAHgyKrsBoA35+/vLYrHo4MGD\nKikpUU1NDZtOAgCAHyQsLEy1tbX6/PPPlZeXp6ioKCUmJjaryG4Mrk0mkzp06KArrrhCgwcP1pNP\nPqmEhAR3LB0AAOCSIuwGgDbS2I87KChIdXV12r17tzIyMtSzZ0/FxMS4e3kAAMBDGAwGdezYUUeP\nHtXRo0eVl5enIUOGKDw8/ILHS2dbqvXo0UNWq1U2m831JBkAAMDlgqsbAGgjjTeagYGBuuqqq5SU\nlCTp7OZRDofDnUsDAAAepkOHDpoyZYqCgoKUm5urd999VzU1NRf1WqfTyQaUAADgsmRwNu5CAgBo\nM2fOnNEHH3wgg8GgG264wd3LAQAAHqi6ulqLFy/WmjVr5O/vr7///e8aMWIEfbcBAMBPFmE3AAAA\nAHio1NRULVy4UNnZ2briiiu0aNEitW/f3t3LAgAAcAvamAAAAACAh+rfv79Gjx4tSaqqqpLVanXz\nigAAANyHym4AAAAA8GA5OTkqKirSiBEj3L0UAAAAtyLsBgAAAIDLhM1mY/NJAADwk0XYDQAAAAAA\nAADwePTsBgAAAAAAAAB4PMJuAAAAAAAAAIDHI+wGAAAAAAAAAHg8wm4AAAAAAAAAgMcj7AYAAAAA\nAAAAeDzCbgAAAAAAAACAxyPsBgAAAAAAAAB4PMJuAAAAAAAAAIDHI+wGAAAAAAAAAHg8wm4AAAAA\nAAAAgMcj7AYAAAAAAAAAeDzCbgAAAPxgY8eOVXx8vG677bb/aPxytnbtWsXHxys+Pl6pqan/0Ryp\nqamuOdauXdvKK/zWAw884HqfH4PnnnvOtZ78/Hx3LwcAAAAexuzuBQAAAFxO8vPz/3979x5UdZ3/\ncfzFvQAVAQ0322DUSCQI1uuaRohOiswuUhGtLi2ira2lae3FHN1pa3B2djfN1KYRll0UvIKWjYbl\nekllRBFTKFHUELxwOWAiunDg/P5wOD9OwAFBck89HzPOfPt+Pt/P93M+5/uHvs6n91cTJkxos83R\n0VHu7u56+OGHNXz4cD377LPy8/P7nmcIAAAAAD9M7OwGAAD4nhiNRtXU1OjEiRNKTk7W1KlT9eGH\nH97radmk5t2/f/zjH+/1VAAAAAD8j2BnNwAAQA8JDAxUUlKS+b+NRqMuXbqkHTt2aOfOnTIajfr7\n3/8uLy8vxcTE3MOZ3n179uy511MAAAAA8CND2A0AANBDXF1d9cgjj1icCwgIUEREhIYNG6a//e1v\nkqR3331X0dHRsrfnf7oDAAAAgK7iX1QAAAD3QEJCggYMGCBJqqioUGFh4T2eEQAAAADYNnZ2AwAA\n3AMODg4KCgrS5cuXJUllZWUKDAw0t/v7+0uSoqOjtWzZMhUVFWndunXKyclReXm5bt68qW3btmno\n0KEW4964cUObNm3S3r17VVxcrJqaGrm5ucnPz09hYWF64YUX1Lt3b6tzMxqN2rhxoz766CMVFxer\nsbFRAwYMUHh4uF588UV5e3t3+PnCw8NVVlamkSNHKi0trd1+TU1N+vTTT5Wdna0TJ07IYDDIaDTK\n29tb/v7+Gjt2rKZOnSpPT0+LcZtlZWUpKyur1binT59u8355eXnKzMxUbm6uKioqzPcKCQnRc889\np1GjRnX42c6ePavk5GTl5OSosrJSffr00dChQxUbG6uIiIgOr79bDAaDdu/erZycHH399de6cuWK\n6uvr1atXLw0ePFjjx49XXFycevXq1ekxa2trlZqaquzsbJWVlampqUm+vr6aPHmy4uPj5eLi0uEY\nZWVlysjI0KFDh1RWVqYbN27Iw8NDQ4cO1ZQpUxQVFSVHR/4ZAgAAgLuPv2UCAADcIw4ODubjxsbG\ndvtt2bJFf/7zn9XQ0GB1vMOHD2vhwoWqqqqyOF9TU6Pjx4/r+PHj+te//qX33ntPI0aMaHOMa9eu\nKTExUV9++aXF+eLiYhUXFysrK+uuvVTzm2++0auvvqqvv/66Vdvly5d1+fJl7d27VxcvXtSbb77Z\nrXvdunVLixcv1scff9yqraysTGVlZdqxY4d++ctf6i9/+YucnZ3bHCczM1NLliyx+C4qKipUUVGh\n/fv3KzY2Vo8//ni35tpZkyZN0vXr11udr66uVm5urnJzc5WWlqY1a9ZY/JDSntLSUiUkJOibb76x\nOF9YWKjCwkJlZWXpn//8p3x8fNodIzk5We+++26rZ7XlGjXP6YEHHujkJwUAAAA6h7AbAADgHmkZ\n8vbv37/NPqdOndLHH38sb29vvfjiiwoODpaDg4MKCgrUp08fc7+DBw9q9uzZMhqN8vDwUFxcnAID\nA+Xj46Pa2lodPnxY69atk8Fg0OzZs7Vp0yYNGTLE4l5NTU16+eWXzUF3QECA4uPjNXjwYF2/fl2f\nf/65MjIy9Oqrr+rmzZvd+uylpaWKjY1VdXW1JCk0NFTTpk3ToEGD5OLiovLycuXn52vXrl0W1yUn\nJ6uhoUFRUVGSpAkTJmj+/PlW79XY2KiXXnpJOTk5kqQxY8YoKipKAwcOlJubm86fP69NmzbpyJEj\n2rZtm+zt7S1eLNrsiy++0KJFi2QymeTk5KTp06crLCxMbm5uOnv2rFJSUrRx40Z99dVX3Vqbzmps\nbFRoaKjGjx+vRx99VF5eXmpsbNSlS5eUnZ2t7OxslZeXa86cOfroo4/Ut29fq+PNnz9fJSUlmjZt\nmqZMmaK+ffuqpKRE6enpys3N1blz55SYmKjMzMw2fwxYuXKl3n//fUmSn5+f4uLi5OfnJy8vL5WX\nlys7O1vbtm1TQUGBEhMTtXHjRrm6uvbI2gAAAODHibAbAADgHti1a5fOnTsn6faLLIOCgtrsd+bM\nGQ0ePFjr1q2zCCuDg4PNx7W1tXr99ddlNBo1ZswYvf/++3J3d7cYZ/To0YqOjlZcXJwMBoPeeecd\npaamWvTZunWrjh49KkkaN26c1qxZIycnJ3P7mDFj9OSTT+qll16yuhO9M15//XVz0D1v3jy9/PLL\nFu3Dhg3TU089pfnz5+vq1avm835+fhb9evfu3eoloN+1du1a5eTkyMnJScuXL29VaiQwMFBRUVFK\nSkpSamqqMjMzFRMTo+HDh5v7GI1GLVmyxBx0r127VqNHjza3P/bYY4qMjNSsWbPMoXpPy8rKkq+v\nb6vzISEhioyM1MGDB5WYmKjy8nKtX79ec+fOtTreyZMnlZSUpGnTppnPBQYGavLkyfrDH/6g7du3\n68yZM0pOTtacOXMsrj127JhWrVolSZo9e7Zee+01ixeuNn+f4eHheuWVV1RUVKTU1NRW3zsAAADQ\nHbygEgAA4HtiNBp18eJFrVq1Sm+88Yb5fEJCQrtlMyRp6dKlVnflZmRkyGAw6P7779c//vGPVkF3\nM19fX/3ud7+TdLvkycWLFy3a161bJ0lycXFRUlKSRdDdbNy4cXrmmWfa/5CdkJOTo+PHj0u6vTPb\nWuBpZ2dntWxGR27evKmUlBRJ0owZM6zW1F64cKH69esnSdq8ebNF2969e821wuPi4iyC7mbOzs7t\nrltPaCvobmns2LGaMGGCJCk7O7vD8Z588kmLoLuZnZ2dlixZYn4G09PT1dTUZNHngw8+kMlkUlBQ\nkBYsWGARdLc0ceJETZo0SVLrNQYAAAC6i7AbAACghxw5ckT+/v7mP8OGDVNERITee+891dfXS5Ii\n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\n",
            "text/plain": [
              "<Figure size 864x576 with 2 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "image/png": {
              "width": 733,
              "height": 512
            }
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "781wID8HlD5u",
        "colab_type": "text"
      },
      "source": [
        "You can clearly see that our model shouldn't be trusted when it says it's going to rain."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "HogiB9ZomRJ0",
        "colab_type": "text"
      },
      "source": [
        "## Conclusion\n",
        "\n",
        "Well done! You now have a Neural Network that can predict the weather. Well, sort of. Building well-performing models is hard, really hard. But there are tricks you'll pick up along the way and (hopefully) get better at your craft!\n",
        "\n",
        "- [Run the complete notebook in your browser (Google Colab)](https://colab.research.google.com/drive/1lDXVkdt7GC8jK_nGmOMKeDywXse-DY-u)\n",
        "- [Read the Getting Things Done with Pytorch book](https://github.com/curiousily/Getting-Things-Done-with-Pytorch)\n",
        "\n",
        "You learned how to:\n",
        "\n",
        "- Preprocess CSV files and convert the data to Tensors\n",
        "- Build your own Neural Network model with PyTorch\n",
        "- Use a loss function and an optimizer to train your model\n",
        "- Evaluate your model and learn about the perils of imbalanced classification"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "SY47i7y_lFXE",
        "colab_type": "text"
      },
      "source": [
        "## References\n",
        "\n",
        "- [Precision and Recall](https://en.wikipedia.org/wiki/Precision_and_recall)\n",
        "- [Beyond Accuracy: Precision and Recall](https://towardsdatascience.com/beyond-accuracy-precision-and-recall-3da06bea9f6c)"
      ]
    }
  ]
}